Jdbc 为什么我可以使用SELECT而不是CALL调用HSQL函数?
根据唯一的SQL程序要求Jdbc 为什么我可以使用SELECT而不是CALL调用HSQL函数?,jdbc,hsqldb,sql-function,Jdbc,Hsqldb,Sql Function,根据唯一的SQL程序要求调用语法。我正在编写一个SQL函数,但无法从中选择。我只能打电话给它。有人能看到我错过的东西吗?这是我的密码 public static void main(String[] args) throws Exception { Class<?> driverClass = Class.forName("org.hsqldb.jdbcDriver"); JDBCDriver driver = (JDBCDriver) driverClass.new
调用
语法。我正在编写一个SQL函数,但无法从中选择。我只能打电话给它。有人能看到我错过的东西吗?这是我的密码
public static void main(String[] args) throws Exception {
Class<?> driverClass = Class.forName("org.hsqldb.jdbcDriver");
JDBCDriver driver = (JDBCDriver) driverClass.newInstance();
Properties props = new Properties();
props.setProperty("user", "sa");
props.setProperty("password", "");
Connection c = driver.connect("jdbc:hsqldb:mem:aname", props);
execute(c, "CREATE TABLE T (i INT)");
execute(c, "INSERT INTO T VALUES (1)");
execute(c, "CREATE FUNCTION f() RETURNS TABLE (i INT) READS SQL DATA " +
" RETURN TABLE (SELECT * FROM T)");
System.out.println("Call returns the ResultSet:");
execute(c, "{ CALL f() }");
try {
execute(c, "SELECT * FROM f()");
} catch (Exception e) {
System.out.println("Select throws the exception:");
System.out.println(e);
}
}
private static void execute(Connection c, String sql) throws SQLException {
Statement s = c.createStatement();
try {
s.execute(sql);
ResultSet rs = s.getResultSet();
if (rs != null) {
printResultSet(rs);
}
} finally {
s.close();
}
}
private static void printResultSet(ResultSet rs) throws SQLException {
try {
while (rs.next()) {
int columnCount = rs.getMetaData().getColumnCount();
for (int i = 1; i <= columnCount; i++) {
System.out.println(rs.getObject(i));
}
}
} finally {
rs.close();
}
}
选择此函数返回的表的正确语法如下:
SELECT * FROM TABLE(F())
似乎还没有实施 当前HSQLDB函数不能有out参数。它可以返回一个 单值结果或表,由execute()调用返回
SELECT * FROM TABLE(F())