java连接access的用户名、密码异常Decoding not supported解决
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java连接access的用户名、密码异常Decoding not supported解决,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2809字,纯文字阅读大概需要5分钟。
内容图文
Java通过ucanaccess
对Access
数据库.accdb
文件连接:
public static Connection getConn() {
try {
String dbURL = "jdbc:ucanaccess://" +
"C:\\Users\\f1334185\\Documents\\数据库4.accdb";
return DriverManager.getConnection(dbURL);
} catch (Exception e) {
System.out.println("AccessDB connection fail");
e.printStackTrace();
}
return null;
}
在.accdb
文件没设置密码时,可以正常访问:
@Autowired
private ObjectMapper objectMapper;
@Test
public void contextLoads() throws SQLException, JsonProcessingException {
Connection conn = dbUtil.getConn();
Statement statement = conn.createStatement();
ResultSet resultSet = statement.executeQuery("select * from tb_user");
ResultSetMetaData metaData = resultSet.getMetaData();
int columnCount = metaData.getColumnCount();
List<Map<String, Object>> list = new ArrayList<>();
while (resultSet.next()){
Map<String, Object> map = new HashMap<>();
for (int i = 0; i < columnCount; i++) {
String columnName = metaData.getColumnName(i + 1);
Object object = resultSet.getObject(columnCount);
map.put(columnName, object);
}
list.add(map);
}
System.out.println(objectMapper.writeValueAsString(list));
}
加密.accdb
文件后,在代码设置用户名,密码:
public static Connection getConn() {
try {
String dbURL = "jdbc:ucanaccess://" +
"C:\\Users\\f1334185\\Documents\\数据库4.accdb";
return DriverManager.getConnection(dbURL, "aa", "aa");
} catch (Exception e) {
System.out.println("AccessDB connection fail");
e.printStackTrace();
}
return null;
}
再次访问,会错误抛出异常:
UCAExc:::4.0.4 Decoding not supported. Please choose a CodecProvider which supports reading the current database encoding.
通过官方文档UCanAccess
看到
要打开加密的.accdb
文件,还需要jackcess-encrypt
依赖。所有添加依赖:
<dependency>
<groupId>com.healthmarketscience.jackcess</groupId>
<artifactId>jackcess-encrypt</artifactId>
<version>2.1.4</version>
</dependency>
程序运行,还是抛同样错误。再通过文档、Google搜索等发现,还需要新建类:
public class JackcessOpener implements JackcessOpenerInterface {
@Override
public Database open(File file, String s) throws IOException {
DatabaseBuilder builder = new DatabaseBuilder(file);
builder.setAutoSync(false);
builder.setCodecProvider(new CryptCodecProvider(s));
builder.setReadOnly(false);
return builder.open();
}
}
但该类却没说明怎么去使用,没办法,只能看源码了,最终发现:
可看到,如果有该Key
为jackcessopener
的,便通过该key
的value
反射获取实例。所以,修改获取连接 :
public static Connection getConn() {
try {
String dbURL = "jdbc:ucanaccess://" +
"C:\\Users\\f1334185\\Documents\\数据库4.accdb";
Properties pro = new Properties();
pro.put("user", "aa");
pro.put("password", "aa");
pro.put("jackcessopener", "com.example.demo.JackcessOpener");
return DriverManager.getConnection(dbURL, pro);
} catch (Exception e) {
System.out.println("AccessDB connection fail");
e.printStackTrace();
}
return null;
}
运行程序,不再报错,并获取的数据。
内容总结
以上是互联网集市为您收集整理的java连接access的用户名、密码异常Decoding not supported解决全部内容,希望文章能够帮你解决java连接access的用户名、密码异常Decoding not supported解决所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。