package my.test.jdbc; import java.sql.CallableStatement; import java.sql.Types; import my.test.TestBase; public class JdbcCallableStatementTest extends TestBase { public static void main(String[] args) throws Exception { new JdbcCallableStatementTest().start(); } @Override public void init() throws Exception { //prop.setProperty("TRACE_LEVEL_SYSTEM_OUT", "20"); } //测试org.h2.result.LocalResult //org.h2.result.ResultRemote @Override public void startInternal() throws Exception { // stmt.executeUpdate("drop table IF EXISTS JdbcCallableStatementTest CASCADE"); // stmt.executeUpdate("create table IF NOT EXISTS JdbcCallableStatementTest(id int, name varchar(500), b boolean)"); // stmt.executeUpdate("CREATE INDEX IF NOT EXISTS JdbcCallableStatementTestIndex ON JdbcCallableStatementTest(name)"); // // stmt.executeUpdate("insert into JdbcCallableStatementTest(id, name, b) values(10, 'a1', true)"); // stmt.executeUpdate("insert into JdbcCallableStatementTest(id, name, b) values(20, 'b1', true)"); // stmt.executeUpdate("insert into JdbcCallableStatementTest(id, name, b) values(30, 'a2', false)"); // stmt.executeUpdate("insert into JdbcCallableStatementTest(id, name, b) values(40, 'b2', true)"); // stmt.executeUpdate("insert into JdbcCallableStatementTest(id, name, b) values(50, 'a3', false)"); // stmt.executeUpdate("insert into JdbcCallableStatementTest(id, name, b) values(60, 'b3', true)"); // stmt.executeUpdate("insert into JdbcCallableStatementTest(id, name, b) values(70, 'b3', true)"); // stmt.executeUpdate("CREATE SCHEMA IF NOT EXISTS myschema AUTHORIZATION sa"); // stmt.executeUpdate("CREATE TABLE IF NOT EXISTS FunctionTest(id int primary key, name varchar(500))"); // stmt.executeUpdate("CREATE ALIAS IF NOT EXISTS myschema.MY_SQRT FOR \"java.lang.Math.sqrt\""); callableStatement(); } void callableStatement() throws Exception { sql = "?= CALL myschema.MY_SQRT(2.2)"; sql = "?= CALL myschema.MY_SQRT(?)"; //sql = "select id from JdbcPreparedStatementTest where id>?"; //sql = "?2 = CALL myschema.MY_SQRT(2.2)"; CallableStatement cs = conn.prepareCall(sql); //cs.registerOutParameter(1, Types.DOUBLE); //sqlType其实被忽略了,所以设什么都没用 //cs.registerOutParameter("ID", Types.DOUBLE); //cs.registerOutParameter("2", Types.DOUBLE); //cs.registerOutParameter("MYSCHEMA.MY_SQRT(2.2)", Types.DOUBLE); cs.registerOutParameter("MYSCHEMA.MY_SQRT(?2)", Types.DOUBLE); cs.setDouble(2, 2.2); cs.execute(); System.out.println(cs.getDouble(1)); } }