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;
}
プログラム、エラーなしを実行し、データを取得します。