使用 JDBC 处理包含 Unicode(旁遮普语、印地语)数据和表/列名称的 Access 数据库

Posted

技术标签:

【中文标题】使用 JDBC 处理包含 Unicode(旁遮普语、印地语)数据和表/列名称的 Access 数据库【英文标题】:Using JDBC to work with an Access database containing Unicode (Punjabi, Hindi) data and table/column names 【发布时间】: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);         

                                  

【问题讨论】:

Java ODBC MS-Access Unicode character problems的可能重复 这可能吗? ..当我们在java中使用ms访问时...查询是Select * from ["MS Access table namewritten in Hindi language"]; 【参考方案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 数据库运行查询。

【讨论】:

以上是关于使用 JDBC 处理包含 Unicode(旁遮普语、印地语)数据和表/列名称的 Access 数据库的主要内容,如果未能解决你的问题,请参考以下文章

将旁遮普语文本转换为英文文本

使用 strophe,旁遮普语的 facebook 聊天

如何让旁遮普语/扭曲绕过 dns

无法运行旁遮普语

将旁遮普语设置为 Facebook 聊天的 BOSH XMPP 代理

无法安装旁遮普语