如何将UCanAccess连接到使用数据库密码加密的Access数据库?

3 java ms-access jdbc ms-access-2010 ucanaccess

我开发了一个带有Access数据库的Java应用程序(字典)来存储字典的单词,我正准备发布它.我想用密码加密我的数据库,以防止人们访问我的文字.当我设置密码时,Java代码显示此异常

net.ucanaccess.jdbc.UcanaccessSQLException: Decoding not supported.  Please choose a CodecProvider which supports reading the current database encoding.
at net.ucanaccess.jdbc.UcanaccessDriver.connect(UcanaccessDriver.java:247)
Run Code Online (Sandbox Code Playgroud)

这是我用密码加密数据库之前的连接代码....

String s1="jdbc:ucanaccess://";
String user="";
String pass="";
String s4="words.accdb";

public void connectToDB(){
        //database connection
        try {
            conn = DriverManager.getConnection(s1+s4,user,pass);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        //end of database connection
    }
Run Code Online (Sandbox Code Playgroud)

以下是使用密码加密后的代码,例如12345 ...

String s1="jdbc:ucanaccess://";
String user="";
String pass="12345";
String s4="words.accdb";

public void connectToDB(){
        //database connection
        try {
            conn = DriverManager.getConnection(s1+s4,user,pass);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        //end of database connection
    }
Run Code Online (Sandbox Code Playgroud)

Ham*_*mad 6

步骤如何将UCanAccess连接到使用数据库密码加密的Access数据库

第1步:
将这两个包添加到您的项目中(jackcess-encrypt.jar,bcprov-ext-jdk15on-152)

您可以从以下链接下载这两个软件包:

Jackcess加密
Bouncy城​​堡

第2步:
您必须将此类添加到项目文件夹中

import java.io.File;
import java.io.IOException;
import net.ucanaccess.jdbc.JackcessOpenerInterface;
import com.healthmarketscience.jackcess.CryptCodecProvider;
import com.healthmarketscience.jackcess.Database;
import com.healthmarketscience.jackcess.DatabaseBuilder;

public class CryptCodecOpener implements JackcessOpenerInterface {
         @Override
    public Database open(File fl,String pwd) throws IOException {
       DatabaseBuilder dbd =new DatabaseBuilder(fl);
       dbd.setAutoSync(false);
       dbd.setCodecProvider(new CryptCodecProvider(pwd));
       dbd.setReadOnly(false);
       return dbd.open();
    }
  //Notice that the parameter setting autosync =true is recommended with UCanAccess for performance reasons. 
  //UCanAccess flushes the updates to disk at transaction end. 
  //For more details about autosync parameter (and related tradeoff), see the Jackcess documentation. 
}
Run Code Online (Sandbox Code Playgroud)

像这样

在此输入图像描述

第3步:
使用以下连接代码

public void connectToDB(){
            try {
                conn = DriverManager.getConnection("jdbc:ucanaccess://words.accdb;jackcessOpener=CryptCodecOpener", "user", "pass");
            } catch (SQLException ex) {
                ex.printStackTrace();
            }
    }
Run Code Online (Sandbox Code Playgroud)


您还可以观看此视频... https://www.youtube.com/watch?v=TT6MgBBkRSE