使用 UCanAccess 的 MS Access '97 DB 字符集
Posted
技术标签:
【中文标题】使用 UCanAccess 的 MS Access \'97 DB 字符集【英文标题】:CharSet for MS Access '97 DB using UCanAccess使用 UCanAccess 的 MS Access '97 DB 字符集 【发布时间】:2020-01-13 10:37:28 【问题描述】:嘿,我正在使用 ucanaccess-5.0.0 读取数据库。 该数据库可能是
jdbc:ucanaccess://$databaseFile.absolutePath;memory=false;charSet=Cp1250
它似乎被忽略了,因为我仍然没有从数据库中取出我的德语变音符号。
我该怎么办?
【问题讨论】:
【参考方案1】:工作解决方案:
class DatabaseOpener : JackcessOpenerInterface
override fun open(fl: File, pwd: String?): Database
return DatabaseBuilder.open(fl).apply
this.charset = charset("Cp1252")
// URL
"jdbc:ucanaccess://<path-to-mdb-file>;memory=false;jackcessOpener=$DatabaseOpener::class.qualifiedName!!"
【讨论】:
【参考方案2】:在java上:
public class CryptCodecOpener implements JackcessOpenerInterface
public Database open(File fl,String pwd) throws IOException
DatabaseBuilder dbd =new DatabaseBuilder(fl);
dbd.setCodecProvider(new CryptCodecProvider(pwd));
dbd.setCharset(Charset.forName("WINDOWS-1251"));
return dbd.open();
public class MainTest
public static void main(String[] args) throws IOException
String connUrl = "jdbc:ucanaccess://C:/GATE/Server/config.mdb";
try
Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
Connection conn =
DriverManager.getConnection(connUrl + ";jackcessOpener=com.example.demo.CryptCodecOpener");
Statement st = conn.createStatement();
String sql = "SELECT * FROM Users LIMIT 10";
ResultSet rs = st.executeQuery(sql);
while (rs.next())
System.out.println("\n" + rs.getString(1) + "\t" + rs.getString(3));
catch (Exception e)
System.out.println(e.getMessage());
行家:
<dependency>
<groupId>net.sf.ucanaccess</groupId>
<artifactId>ucanaccess</artifactId>
<version>5.0.1</version>
</dependency>
<dependency>
<groupId>com.healthmarketscience.jackcess</groupId>
<artifactId>jackcess-encrypt</artifactId>
<version>3.0.0</version>
</dependency>
【讨论】:
请解释你的答案。 WINDOWS-1251 是 MSAccess-97 的正确字符集,而不是问题中指定的 Cp1250 吗? 我在mdbviewer.herokuapp.com检查了我需要的数据库通过复制到这个站点2cyr.com/decodewindows-1251编码适合我来解密不可读的字符以上是关于使用 UCanAccess 的 MS Access '97 DB 字符集的主要内容,如果未能解决你的问题,请参考以下文章
通过 UCanAccess 在 Eclipse 中“从表中生成实体”(MS Access)
如何在 UCanAccess 中设置 MS Access 数据库路径?
无法使用 DBeaver 和默认的 UCanAccess-5.0.0 驱动程序连接到 MS Access mdb 文件