我有一个到 Wildfly 9.0.2 中定义的 MS Access 2000 数据库的连接。工作正常。使用命令行 UCanAccess,我使用 -Dfile.encoding=ISO-8859
运行它,以便在 Ubuntu 上正确显示国家字符(挪威语)。在 OS X 上,命令行无需任何 jre 选项即可正确显示国家字符。然而,Wildlfy 实例也在 OS X 上运行,并且无法正确显示国家字符(目前它们只是在简单测试中写入控制台)在任何基于 Java 的 sql 客户端(如 DBeaver 或 SQLSquirrel)中使用 UcanAccess-driver “都可以工作” “当涉及到字符集时。但是,通过JPA和wildfly查询数据库,国家字符被替换为“?”。
因此,有一种方法可以在 Jackcess 的 jdbc-url 上指定特定的“开启者”:
......mdb;jackcessOpener=ucaextension.JackcessWithCharsetISO88591Opener
“开场白”看起来像这样:
public class JackcessWithCharsetISO88591Opener implements JackcessOpenerInterface {
public Database open(File f, String pwd) throws IOException {
DatabaseBuilder db = new DatabaseBuilder(f);
db.setCharset(Charset.forName("ISO-8859-1"));
try {
db.setReadOnly(false);
return db.open();
} catch (IOException e) {
db.setReadOnly(true);
return db.open();
}
}
}
(是的,异常处理至少应该发出警告。)
所以我将其打包为 jar 文件(maven),删除了 wildfly 中的旧连接、驱动程序和模块定义。然后我添加了这个 jar 文件以及 ucanaccess 模块的其他文件(ucanaccess 本身、hsqldb 等),重新创建了驱动程序和连接,现在使用了 opener 参数,并使用它重新部署了 war 。但野蝇提示道:
Caused by: java.lang.ClassNotFoundException: ucaextension.JackcessWithCharsetISO88591Opener from [Module "com.ucanaccess:main" from local module loader @1060b431 (finder: local module finder @612679d6 (roots: /Users/jonmartinsolaas/Local/wildfly-9.0.2.Final/modules,/Users/jonmartinsolaas/Local/wildfly-9.0.2.Final/modules/system/layers/base))]
很明显,url 参数已被选取,但未找到该类,即使它与驱动程序的其他 jar 一起部署。该类实际上位于 jar 文件中。但是我需要从其他 jar 或其他东西中的任何其他 MANIFEST.INF 类路径引用它吗?
最佳答案
情况似乎是各种控制台不显示国家字符。事实上,我实际上必须指定在 ubuntu 命令行上运行的字符集,这让我相信存在问题,并且实际在浏览器中而不是在日志记录控制台中显示数据表明了这一点。不需要针对特定字符集的“开场白”。
关于character-encoding - 使用 iso-8859-1 在 Wildfly 中打开 ucanaccess/jackcess 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35286750/