UCanAccessを使いましょ
build.gradle.kts
implementation("net.sf.ucanaccess:ucanaccess:5.0.1")
テーブル一覧を取得
コツっていうんですかね、接続URLに;sysSchema=true
が必要です。
そんだけです。kotlinとJavaと両方のコードを載せておきます。
acc.kt
import java.sql.DriverManager
fun main() {
val accdb = "c:/hoge.accdb"
DriverManager.getConnection("jdbc:ucanaccess://$accdb;sysSchema=true").use { conn ->
conn.createStatement().use { st ->
st.executeQuery("SELECT * FROM sys.MSysObjects").use { rs ->
while (rs.next()) {
println(rs.getString("Name"))
}
}
}
}
}
acc.java
import java.sql.*;
public class AccDbJ {
public static void main(String...args) {
String accdb = "c:/hoge.accdb";
try(Connection conn = DriverManager.getConnection("jdbc:ucanaccess://" + accdb + ";sysSchema=true");
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery("SELECT * FROM sys.MSysObjects")) {
while (rs.next()) {
System.out.println(rs.getString("Name"));
}
}
catch(SQLException e) {
e.printStackTrace();
}
}
}
以上でござる
もしかしたら以下のキーワードで飛んでくる人もいるかも知れないんで書いておきましょ。
UCAExc:::5.0.1 user lacks privilege or object not found: MSYSOBJECTS
要するに;sysSchema=true
で権限(privilegeだから特権?)を与えりゃいいって話ですね。
そんな感じです。
いや最近accdbとかいう拡張子初めて見たんで自分の世界に寄せました、というお話。