My 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); }
}
sql = "SELECT [रंग], inEnglish FROM hindi";
(原始答案)
如果如您对该问题的评论所述,您有一个以印地语或旁遮普语命名的Access数据库,那么使用Java Access数据库的两种最常见的"直接"方法将不适用:
(1)JDBC-ODBC桥
这是你一直在尝试使用的。不幸的是,当数据库包含包含代码点U+007F以上字符的Unicode文本时,JDBC-ODBC桥从未与Access ODBC驱动程序一起正常工作。对于文本数据和表/列名称都是如此。此外,JDBC-ODBC桥已过时:它已从Java 8中删除,不受支持。因此,这种选择是一条死胡同。
(2)UCanAccess
UCanAccess可以成功读取/写入Unicode文本数据,但当前(2.x)版本无法使用包含代码点U+007F以上Unicode字符的元数据(表/列名)。计划在UCanAccess(3.x)的下一个主要版本中支持表/列名中的这些字符,但尚未宣布发布的时间表。
其他选项:
根据您需要操作的限制条件,您可能会考虑以下一种或多种解决方案。
您可以将Access数据库中的数据移动到另一个数据库中,该数据库的JDBC驱动程序支持印地语和旁遮普语的元数据。
您可以用C#而不是Java构建应用程序。(Visual Studio 2013社区版免费提供。)
如果真的必须坚持使用Java,并且您的数据必须保留在Access数据库中,那么您可以安装Microsoft SQL Server Express Edition,在SQL Server中创建一个指向Access数据库的"链接服务器"(详细信息请参阅此处),然后使用SQL Server的JDBC驱动程序对Access数据库运行查询。