如何调用H2LINK_SCHEMA?

How to call H2 LINK_SCHEMA?

我正在尝试 运行 link_schema

    final String query = "? = CALL LINK_SCHEMA('ROADS', '', '" + url + "', '" + user + "', '" + pass + "', 'ROADS');";
    CallableStatement statement = conn.prepareCall(query);
    statement.execute();
    ResultSet rs = statement.getResultSet();

我得到一个 ResultSet,但它不包含承诺的 table 列表。稍后当我尝试访问 table 时,我收到错误 "Schema not found"。我哪里错了?

更新:好像是Oracle驱动的问题;通过 .

检查答案和评论部分

你需要使用

Statement st = con.createStatement();
ResultSet rs = st.executeQuery("CALL LINK_SCHEMA(…)");

或更安全

PreparedStatement ps = con.prepareStatement("CALL LINK_SCHEMA(?, '', ?, ?, ?, ?)");
ps.setString(1, "ROADS");
ps.setString(2, url);
ps.setString(3, user);
ps.setString(4, pass);
ps.setString(5, "ROADS");
ResultSet rs = ps.executeQuery();

简单测试用例:

try (Connection c1 = DriverManager.getConnection("jdbc:h2:mem:1");
        Connection c2 = DriverManager.getConnection("jdbc:h2:mem:2")) {
    Statement s1 = c1.createStatement(), s2 = c2.createStatement();
    s1.execute("CREATE SCHEMA S; CREATE TABLE S.T1(ID INT); CREATE TABLE S.T2(ID INT)");
    try (ResultSet rs = s2.executeQuery("CALL LINK_SCHEMA('S', '', 'jdbc:h2:mem:1', '', '', 'S')")) {
        while (rs.next()) {
            System.out.println(rs.getString(1));
        }
    }
}
T1
T2