Java ODBC MS-Access Unicode字符问题

我正在尝试创建一个连接到Access数据库的应用程序.我通过使用.mdb文件建立我的Java程序的ODBC连接来实现它,但我有Unicode字符的这个问题.如果记录是用英文(拉丁文)字符编写的,则.mdb文件会识别字符,但如果记录是用希腊语编写的,那么会出现一些奇怪的字符,而我无法使用ResultSet对象获取记录.有人可以帮忙吗?

解决方法:

当字符串包含代码点高于U 007F的Unicode字符时,JDBC-ODBC Bridge将无法与Access ODBC驱动程序一起正常工作.希腊字符属于该类别,因此JDBC-ODBC Bridge方法不适用于您. (更多细节here.)此外,JDBC-ODBC Bridge已从Java中删除(自Java 8起).

为了获得对希腊字符的适当支持,我建议使用UCanAccess.有关如何设置它的概述,请参阅我的另一个答案here.

将项目配置为使用ucanaccess后,您可以使用以下代码处理Access数据库

Connection conn=DriverManager.getConnection(
        "jdbc:ucanaccess://C:/__tmp/unicode.accdb");
String language = "Greek";

PreparedStatement ps = conn.prepareStatement(
        "SELECT [word], [english_equiv] " +
        "FROM [vocabulary] " +
        "WHERE language=?");
ps.setString(1, language);
ResultSet rs = ps.executeQuery();
while (rs.next()) {
    System.out.println(String.format(
            "\"%s\" is %s for \"%s\".", 
            rs.getString("word"),
            language,
            rs.getString("english_equiv")));
}
rs.close();
ps.close();

String newWord = "ηλεκτρονικός υπολογιστής";
String newEnglishEquiv = "computer";
ps = conn.prepareStatement(
        "INSERT INTO [vocabulary] ([word], [language], [english_equiv]) " +
        "VALUES (?,?,?)");
ps.setString(1, newWord);
ps.setString(2, language);
ps.setString(3, newEnglishEquiv);
ps.executeUpdate();
System.out.println(String.format(
        "\"%s\" has been added to the table.", 
        newWord));

代码生成以下控制台输出

"γιορτή" is Greek for "feast"
"ηλεκτρονικός υπολογιστής" has been added to the table.

(翻译由Google Translate提供.)

相关文章

连接数据库的方式:第一种方式:ODBC:开放数据库连接是微软...
JDBCRequest 使用VariableNamesmysql:数据库连接池对象var...
 1.JDBCDBC(JavaDataBaseConnectivity):Java数据库连接技术...
1.需要jar包的支持:java.sqljavax.sqlmysql-conneter-java....
1.简介Activiti是一个业务流程管理(BPM)框架,它是覆盖了业务...
1.JDBC体系系统一组规范:接口JDBC接口(API)包括两个层次:...