【问题标题】:Using JDBC to work with an Access database containing Unicode (Punjabi, Hindi) data and table/column names使用 JDBC 处理包含 Unicode(旁遮普语、印地语)数据和表/列名称的 Access 数据库
【发布时间】:2015-02-27 10:01:51
【问题描述】:

我的 Access 数据库有一个表,其中有一列包含旁遮普语文本。我正在尝试使用 JDBC 从 Java (NetBeans) 处理该数据库。

我的代码是:

private void b1ActionPerformed(java.awt.event.ActionEvent evt)
{                                   
  try
  {                     
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        String url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=" + "D:\\PP.accdb";
    Connection conn = DriverManager.getConnection(url);
        System.out.println("Connection Successful");
        Statement stmt = conn.createStatement();
        stmt.execute("select * from Emp");
    ResultSet rs = stmt.getResultSet(); 
    if (rs != null)
        {  
                String s1,s2;
            s1=" ";
            s2=" ";
                while ( rs.next() )
                 {
                JOptionPane.showMessageDialog(null ,rs.getString(2), "Output" ,JOptionPane.INFORMATION_MESSAGE );
                 }
    }
            stmt.close();
            conn.close();
    }
    catch (Exception err) {         System.out.println("ERROR: " + err);         }

}                                  

【问题讨论】:

标签: netbeans jdbc ms-access-2007 jdbc-odbc ucanaccess


【解决方案1】:

UCanAccess 3.x 版于 2015 年 8 月发布,现在支持表名和列名中的 Unicode 字符。请注意,此类名称需要用方括号括起来,至少对于 UCanAccess v3.0.0,例如:

sql = "SELECT [रंग], inEnglish FROM hindi";


(原答案)

如果,如您对问题的评论所述,您有一个 Access 数据库,其表名和列名是印地语或旁遮普语,那么从 Java 处理 Access 数据库的两种最常见的“直接”方法将不适用于你:

(1) JDBC-ODBC 桥

这是您一直在尝试使用的。不幸的是,当数据库包含包含高于代码点 U+007F 的字符的 Unicode 文本时,JDBC-ODBC 桥从未与 Access ODBC 驱动程序一起正常工作。这对于文本 data 和表/列 names 都是如此。此外,JDBC-ODBC 桥已过时:它已从 Java 8 中删除并且不受支持。所以,这个选项是一个死胡同。

(2) UCanAccess

UCanAccess 可以成功读/写 Unicode 文本 data,但当前 (2.x) 版本无法使用包含 Unicode 的 元数据(表/列名)代码点 U+007F 上方的字符。计划在 UCanAccess (3.x) 的下一个主要版本中支持表/列名称中的这些字符,但尚未宣布此类版本的时间表。

其他选项:

根据您需要操作的限制条件,您可以考虑以下一种或多种解决方法。

  • 您可以将数据从 Access 数据库移动到另一个数据库,其 JDBC 驱动程序支持印地语和旁遮普语的元数据。

  • 您可以使用 C# 而不是 Java 构建应用程序。 (Visual Studio 2013 社区版免费提供。)

  • 如果您真的必须坚持使用 Java,并且您的数据真的必须保留在 Access 数据库中,那么您可以安装 Microsoft SQL Server Express Edition,创建一个“链接服务器”在 SQL Server 中指向 Access 数据库(详细信息 here),然后使用 JDBC Driver for SQL Server 对 Access 数据库运行查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-15
    • 1970-01-01
    • 1970-01-01
    • 2011-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多