从Java检索具有国际名称的MS Access列(编码)

从Java检索具有国际名称的MS Access列(编码),java,ms-access,Java,Ms Access,我需要从一些旧的Access数据库导入数据。我用一些数据库文件运行了代码,一切正常。现在,我尝试了另一个,但同样的代码不起作用 它似乎与字符编码有关,尽管我没有指定任何内容(也不知道在哪里做) 在第一个db文件上工作,在另一个db文件上给出一个带有“未找到列”的SQLException。在有问题的数据库上,resultSet.getMetaData().getColumnName(3)(同一列)给出“?ge” 更新:看起来数据库之间的结果实际上是一致的。我看到的区别是,第一次导入是从EJB项目中

我需要从一些旧的Access数据库导入数据。我用一些数据库文件运行了代码,一切正常。现在,我尝试了另一个,但同样的代码不起作用

它似乎与字符编码有关,尽管我没有指定任何内容(也不知道在哪里做)

在第一个db文件上工作,在另一个db文件上给出一个带有“未找到列”的SQLException。在有问题的数据库上,resultSet.getMetaData().getColumnName(3)(同一列)给出“?ge”

更新:看起来数据库之间的结果实际上是一致的。我看到的区别是,第一次导入是从EJB项目中的一个类运行的(我运行某个类的主方法,而不是应用服务器中的EJB模块)。第二次导入是在一个新的独立项目上完成的。独立Java项目总是会失败,但在第一个项目中运行相同的代码总是有效的


问题在这里用另一种方式表述:

通过JDBC-ODBC桥和Access ODBC驱动程序操作Access数据库将只对Windows-1252字符集中包含的重音字符可靠工作。在这些情况下,您必须在Eclipse中将Java源文件的字符编码设置为
cp1252
(或者在NetBeans中将项目的字符编码设置为
windows-1252
)。如果Java源文件编码为UTF-8,那么如果涉及重音字符,代码将无法工作。(有关更多详细信息,请参阅我的其他答案。)


< >对于更完整的Unicode字符支持,请考虑使用。

我建议您使用<代码> ReultSt.GETBug(int)< /Code >以避免将来的错误。列顺序不能保证您可以在数据库中使用<代码> ISO-859-1 < /Code >字符集,在获取该列中的数据之前,您必须使用字符集转换器将字符串
age
转换为
age
。另一个解决方法是将数据库的字符集更改为
utf8
utf16
@Rakesh:我不知道access如何在内部对数据库进行编码。对于像样的数据库,jdbc的职责(有时是配置)是向应用程序提供翻译后的java字符串,因此重音应该出现并正确解码。奇怪的是,正如我所说,我将代码从一个项目复制/粘贴到另一个项目。它在项目1中起作用(使用–ge没有错误),但在项目2中不起作用。您正在使用Eclipse吗?如果是,您可以使用上下文菜单属性选项比较两个项目源文件。它们确实存在于两个字符集中,这不是问题所在。
Double age = resultSet.getDouble("âge");