使用 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 数据库的主要内容,如果未能解决你的问题,请参考以下文章