高斯数据库 (gaussDB) - 基于 JDBC 开发 (5)
执行 SQL 语句
执行普通 SQL 语句
应用程序通过执行 SQL 语句来操作数据库的数据(不用传递参数的语句),需要按以
下步骤执行:
步骤 1 调用 Connection 的 createStatement 方法创建语句对象。Statement stmt = con.createStatement();
步骤 2 调用 Statement 的 executeUpdate 方法执行 SQL 语句。int rc = stmt.executeUpdate("CREATE TABLE customer_t1(c_customer_sk INTEGER, c_customer_name VARCHAR(32));");
说明
数据库中收到的一次执行请求(不在事务块中),如果含有多条语句,将会被打包成一个事务,
事务块中不支持 vacuum 操作。如果其中有一个语句失败,那么整个请求都将会被回滚。
步骤 3 关闭语句对象。stmt.close();
执行预编译 SQL 语句
预编译语句是只编译和优化一次,然后可以通过设置不同的参数值多次使用。由于已
经预先编译好,后续使用会减少执行时间。因此,如果多次执行一条语句,请选择使
用预编译语句。可以按以下步骤执行:
步骤 1 调用 Connection 的 prepareStatement 方法创建预编译语句对象。PreparedStatement pstmt = con.prepareStatement("UPDATE customer_t1 SET c_customer_name = ? WHERE c_customer_sk = 1");
步骤 2 调用 PreparedStatement 的 setShort 设置参数。pstmt.setShort(1, (short)2);
步骤 3 调用 PreparedStatement 的 executeUpdate 方法执行预编译 SQL 语句。int rowcount = pstmt.executeUpdate();
步骤 4 调用 PreparedStatement 的 close 方法关闭预编译语句对象。pstmt.close();
调用存储过程
GaussDB 200 支持通过 JDBC 直接调用事先创建的存储过程,步骤如下:
步骤 1 调用 Connection 的 prepareCall 方法创建调用语句对象。CallableStatement cstmt = myConn.prepareCall("{? = CALL TESTPROC(?,?,?)}");
步骤 2 调用 CallableStatement 的 setInt 方法设置参数。cstmt.setInt(2, 50);
cstmt.setInt(1, 20);
cstmt.setInt(3, 90);
步骤 3 调用 CallableStatement 的 registerOutParameter 方法注册输出参数。cstmt.registerOutParameter(4, Types.INTEGER); //注册out类型的参数,类型为整型。
步骤 4 调用 CallableStatement 的 execute 执行方法调用。cstmt.execute();
步骤 5 调用 CallableStatement 的 getInt 方法获取输出参数。int out = cstmt.getInt(4); //获取out参数
示例:
//在数据库中已创建了如下存储过程,它带有out参数。
create or replace procedure testproc
(
psv_in1 in integer,
psv_in2 in integer,
psv_inout in out integer
)
as
begin
psv_inout := psv_in1 + psv_in2 + psv_inout;
end;
/
步骤 6 调用 CallableStatement 的 close 方法关闭调用语句。cstmt.close();
说明
- 很多的数据库类如 Connection、Statement 和 ResultSet 都有 close() 方法,在使用完对象后应把它
们关闭。要注意的是,Connection 的关闭将间接关闭所有与它关联的 Statement,Statement 的
关闭间接关闭了 ResultSet。 - 一些 JDBC 驱动程序还提供命名参数的方法来设置参数。命名参数的方法允许根据名称而不
是顺序来设置参数,若参数有默认值,则可以不用指定参数值就可以使用此参数的默认值。
即使存储过程中参数的顺序发生了变更,也不必修改应用程序。目前 GaussDB 200 数据库的
JDBC 驱动程序不支持此方法。 - GaussDB 200 数据库不支持带有输出参数的函数,也不支持存储过程和函数参数默认值。
- 当游标作为存储过程的返回值时,如果使用 JDBC 调用该存储过程,返回的游标将不
可用。 - 存储过程不能和普通 SQL 在同一条语句中执行。
执行批处理
用一条预处理语句处理多条相似的数据,数据库只创建一次执行计划,节省了语句的
编译和优化时间。可以按如下步骤执行:
步骤 1 调用 Connection 的 prepareStatement 方法创建预编译语句对象。PreparedStatement pstmt = con.prepareStatement("INSERT INTO customer_t1 VALUES (?)");
步骤 2 针对每条数据都要调用 setShort 设置参数,以及调用 addBatch 确认该条设置完毕。pstmt.setShort(1, (short)2);
pstmt.addBatch();
步骤 3 调用 PreparedStatement 的 executeBatch 方法执行批处理。int[] rowcount = pstmt.executeBatch();
步骤 4 调用 PreparedStatement 的 close 方法关闭预编译语句对象。pstmt.close();
说明
在实际的批处理过程中,通常不终止批处理程序的执行,否则会降低数据库的性能。因此在批处
理程序时,应该关闭自动提交功能,每几行提交一次。关闭自动提交功能的语句为:
conn.setAutoCommit(false);
本文内容由互联网用户自发贡献,版权归作者所有,本社区不拥有所有权,也不承担相关法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:jaagool@sina.cn 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。