首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过JDBC-ODBC从Access数据库读取Unicode字符

通过JDBC-ODBC从Access数据库读取Unicode字符
EN

Stack Overflow用户
提问于 2013-10-05 08:37:39
回答 4查看 4.8K关注 0票数 1

我的Access 2010数据库中有一些非标准字符。当我通过

代码语言:javascript
复制
Connection con = null;
try{
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    java.util.Properties prop = new java.util.Properties();
    prop.put("charSet", "UTF8");
    String database = "jdbc:odbc:Lb";
    con = DriverManager.getConnection(database, prop);
} catch (Exception ex) {
    System.out.println("Error");
}
Statement stm = conn.createStatement();
ResultSet rs = stm.executeQuery("SELECT distinct forename, surname from PSN where isValid");

while (rs.next()) {
    String forename = rs.getString("forename");
}

我在字符应该在的位置收到问号(?)。为什么会这样呢?

EN

回答 4

Stack Overflow用户

发布于 2014-09-18 21:22:26

当DB包含波兰语字符时,我会有问号。当我将字符编码设置为windows-1250时,它被修复了。

代码语言:javascript
复制
def establish(dbFile: File): Connection = {
  val fileName = dbFile.getAbsolutePath
  val database = s"${driver}DBQ=${fileName.trim};DriverID=22;READONLY=true}"
  val props = new Properties()
  props.put("charSet", "Cp1250")
  val connection= DriverManager.getConnection(database,props)
  connection
}
票数 1
EN

Stack Overflow用户

发布于 2013-10-05 13:49:35

我希望您的JDBC驱动程序能够透明地处理对数据库的字符读取和写入。Java的内部字符串表示是UTF-16。

代码语言:javascript
复制
Java(UTF-16)         --JDBC--> Database(DbEncoding)
Database(DbEncoding) --JDBC--> Java(UTF-16) 

也许问题是您试图使用UTF8强制读取它们,而数据库使用了另一种内部表示?

另外,你如何验证你收到了“?”

如果涉及System.out,您应该考虑到此PrintStream将内存中的字符串转换为它使用的字符集。IIRC这个字符集可以通过Charset.defaultcharset()找到,它是运行程序的JVM的一个属性。

最好检查字符的十六进制值并查找Unicode表,以确保在从数据库读取时信息已丢失。

希望这能对你有所帮助。

票数 0
EN

Stack Overflow用户

发布于 2014-01-08 05:25:09

这是Access ODBC驱动程序和JDBC-ODBC桥之间长期存在的互操作性问题。Access使用UTF-16LE编码的变体(而不是UTF-8)存储Unicode字符,JDBC-ODBC桥无法检索它们。

(请注意,这不是Access ODBC驱动程序本身的问题,因为其他工具,如Python,可以正确地检索pyodbc字符。这是JDBC-ODBC桥和Access ODBC驱动程序之间的兼容性问题。)

2005年11月,Sun提交了一份bug report,概述了这个问题。该报告在2013年4月被关闭为“with‘t Fix”,并发表了以下评论

桥已从Java 8中删除,不受支持

如果需要在Access数据库中使用任意Unicode字符,则应考虑使用UCanAccess。有关详细信息,请参阅

Manipulating an Access database from Java without ODBC

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19192750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档