首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将UCanAccess连接到使用数据库密码加密的Access数据库?

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

Stack Overflow用户
提问于 2015-07-15 12:05:59
回答 4查看 23.7K关注 0票数 4

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

代码语言:javascript
复制
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)

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

代码语言:javascript
复制
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
    }

下面是密码加密后的代码,例如12345.

代码语言:javascript
复制
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
    }
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-10-24 08:01:25

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

步骤1:

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

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

Jackcess加密

弹跳城堡

第2步:

必须将该类添加到项目文件夹中。

代码语言:javascript
复制
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. 
}

像这样

步骤3:

使用下列连接代码

代码语言:javascript
复制
public void connectToDB(){
            try {
                conn = DriverManager.getConnection("jdbc:ucanaccess://words.accdb;jackcessOpener=CryptCodecOpener", "user", "pass");
            } catch (SQLException ex) {
                ex.printStackTrace();
            }
    }

你也可以看这个视频.https://www.youtube.com/watch?v=TT6MgBBkRSE

票数 7
EN

Stack Overflow用户

发布于 2015-07-16 08:48:59

UCanaccess通过依赖项注入模式支持加密。

-You必须向您的项目中添加jackcess加密和所有相关的依赖项。

-You必须按照ucanaccess网站的建议编写一个实现net.ucanaccess.jdbc.JackcessOpenerInterface的类。

-You必须在jdbc url中传递上述类的名称:如果您将实现类命名为com.pippo.Bingo,则必须以这种方式构建jdbc url:

代码语言:javascript
复制
DriverManager.getConnection("jdbc:ucanaccess://c:/db/your_db_name.mdb;jackcessOpener=com.pippo.Bingo", "sa", pwd);
票数 0
EN

Stack Overflow用户

发布于 2015-07-15 12:26:50

链接到jdbc驱动程序(s1)似乎是无效的。

看看我从本站搜索它时发现的模式

代码语言:javascript
复制
 String url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\\IJTS EXAMPLES\\Database11.accdb;PWD=1234";

下面是来自遗址的一个示例

代码语言:javascript
复制
private void initializeConnection()
{

Connection con ;
try
{

// Load Class Definition for Database Driver
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

// set this to a MS Access DB you have on your machine
String curDir = System.getProperty("user.dir");
String filename = curDir +"/test.mdb";

String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=c:\\test.mdb;READONLY=true";

// Get connection from the DriverManager
con = DriverManager.getConnection( database,"Admin","test" );


} catch (Exception e) {

System.out.println("Database Connection Problem");

}

}

请不要通过用凭据替换部件来更改字符串。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31429939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档