执行SQL语句
应用程序通过执行SQL语句来操作数据库的数据,本节将介绍如何执行SQL语句。
执行普通SQL语句
执行普通SQL语句(不用传递参数的语句),需要按以下步骤执行:
- 调用Connection的createStatement方法创建语句对象。
Statement stmt = con.createStatement();
- 调用Statement的executeUpdate方法执行SQL语句。
int rc = stmt.executeUpdate("CREATE TABLE tab1(id INTEGER, name VARCHAR(32))");
- 关闭语句对象。
stmt.close();
执行预编译SQL语句
预编译语句是只编译和优化一次,然后可以通过设置不同的参数值多次使用。由于已经预先编译好,后续使用会减少执行时间。因此,如果多次执行一条语句,请选择使用预编译语句。可以按以下步骤执行:
- 调用Connection的prepareStatement方法创建预编译语句对象。
PreparedStatement pstmt = con.prepareStatement("UPDATE tab1 SET col1 = ? WHERE key = 1");
- 调用PreparedStatement的setShort设置参数。
pstmt.setShort(1, (short)2);
- 调用PreparedStatement的executeUpdate方法执行预编译SQL语句。
int rowcount = pstmt.executeUpdate();
- 调用PreparedStatement的close方法关闭预编译语句对象。
pstmt.close();
执行批处理
用一条预处理语句处理多条相似的数据,数据库只创建一次查询计划,节省了语句的编译和优化时间。可以按如下步骤执行:
- 调用Connection的prepareStatement方法创建预编译语句对象。
PreparedStatement pstmt = con.prepareStatement("INSERT INTO tab1 VALUES (?)");
- 针对每条数据都要调用setShort设置参数,以及调用addBatch确认该条设置完毕。
pstmt.setShort(1, (short)2); pstmt.addBatch();
- 调用PreparedStatement的executeBatch方法执行批处理。
int[] rowcount = pstmt.executeBatch();
- 调用PreparedStatement的close方法关闭预编译语句对象。
pstmt.close();
说明:
在实际的批处理过程中,通常不终止批处理程序的执行,否则会降低数据库的性能。因此在批处理程序时,应该关闭自动提交功能,每几行提交一次。关闭自动提交功能的语句为:conn.setAutoCommit(false);
调用存储过程
- 调用Connection的prepareCall方法创建预编译存储过程语句对象。
CallableStatement callStmt = conn.prepareCall("call p_test(?,?)");
- 调用CallableStatement相关的setXXX方法设置入参值,使用registerOutParameter方法设置出参类型。
callStmt.setInt(1, 999); callStmt.registerOutParameter(2, java.sql.Types.REF_CURSOR); //类型使用java.sql.Types类中定义的标准类型
- 调用CallableStatement的execute方法执行预编译存储过程语句。
callStmt.execute();
- 调用CallableStatement的getXXX方法获取存储过程的出参。
--通过出参下标来获取值。 ResultSet rs = (ResultSet)callStmt.getObject(2); --通过出参名字来获取值。 ResultSet rs = (ResultSet)callStmt.getObject("out_cursor"); //字符串"out_cursor"是存储过程p_test第二个参数的名字
- 调用CallableStatement的close方法关闭预编译存储过程语句对象。
callStmt.close();
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」关注作者【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。评论
- 调用CallableStatement相关的setXXX方法设置入参值,使用registerOutParameter方法设置出参类型。
- 针对每条数据都要调用setShort设置参数,以及调用addBatch确认该条设置完毕。
- 调用PreparedStatement的setShort设置参数。
- 调用Statement的executeUpdate方法执行SQL语句。