search
LoginSignup
2

posted at

updated at

AccessDB(*.accdb)のテーブル一覧をkotlin, javaで取得

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とかいう拡張子初めて見たんで自分の世界に寄せました、というお話。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
2