如何调用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
我正在尝试 运行 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