【问题标题】: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

它似乎被忽略了,因为我仍然没有从数据库中取出我的德语变音符号。

我该怎么办?

【问题讨论】:

    标签: ms-access kotlin ucanaccess


    【解决方案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编码适合我来解密不可读的字符
      猜你喜欢
      • 1970-01-01
      • 2019-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-23
      相关资源
      最近更新 更多