JDBC 提供三种类型的语句对象: Statement , PreparedStatement , CallableStatement

其中 PreparedStatement 是 Statement 的子类, CallableStatement 是 PreparedStatement 的子类。每一种语句对象用来运行特定类型的 SQL 语句

  • Statement 对象用来运行简单类型的 SQL 语句,语句中无需指定参数
  • PreparedStatement 对象用来运行包含(或不包含) IN 类型参数的预编译 SQL 语句
  • CallableStatement 对象用来调用数据库存储过程

Statement

概述

Statement 对象用于将 SQL 语句发送到数据库服务器

创建 Statement 对象

建立连接后, Statement 对象用 Connection 对象的 createStatement 方法创建,以下代码创建 Statement 对象:

1
2
Connection con = DriverManager.getConnection(url, SYSDBA, SYSDBA);
Statement stmt = con.createStatement();

使用 Statement 对象执行语句

tatement 接口提供了三种执行 SQL 语句的方法: executeQuery 、 executeUpdate 和 execute

  • 方法 executeQuery 用于产生单个结果集的语句,例如 SELECT 语句
  • 方法 executeUpdate 用于执行 INSERT 、 UPDATE 或 DELETE 语句以及 SQL DDL 语句,如 CREATE TABLE 和 DROP TABLE 。
    • INSERT 、 UPDATE 或 DELETE 语句的效果是修改表中零行或多行中的一列或多列。 executeUpdate 的返回值是一个整数,表示受影响的行数。对于 CREATE TABLE 或 DROP TABLE 等 DDL 语句, executeUpdate 的返回值总为零
  • 方法 execute 用于执行返回多个结果集、多个更新元组数或二者组合的语句

执行语句的三种方法都将关闭所调用的 Statement 对象的当前打开结果集(如果存在)。这意味着在重新执行 Statement 对象之前,需要完成对当前 ResultSet 对象的处理。

关闭 Statement 对象

Statement 对象可由 Java 垃圾收集程序自动关闭。但作为一种好的编程风格,应在不需要 Statement 对象时显式地关闭它们。这将立即释放数据库服务器资源,有助于避免潜在的内存问题

PreparedStatement

概述

PreparedStatement 继承 Statement ,并与之在两方面有所不同:

  • PreparedStatement 对象包含已编译的 SQL 语句,语句已经 “ 准备好 ”
    • 包含于 PreparedStatement 对象中的 SQL 语句可具有一个或多个 IN 参数。 IN 参数的值在 SQL 语句创建时未被指定。相反,该语句为每个 IN 参数保留一个问号( “ ? ” )作为占位符。每个问号所对应的值必须在该语句执行之前,通过适当的 setXXX 方法来提供。
    • 由于PreparedStatement 对象已预编译过,所以其执行速度要快于 Statement 对象。因此,需要多次重复执行的 SQL 语句经常创建为 PreparedStatement 对象,以提高效率。
  • 作为 Statement 的子类, PreparedStatement 继承了 Statement 的所有功能。另外它还添加了一整套方法,用于设置发送给数据库以取代 IN 参数占位符的值。同时,三种方法 execute 、 executeQuery 和 executeUpdate 能执行设置好参数的语句对象

创建 PreparedStatement 对象

以下的代码段(其中 con 是 Connection 对象)创建一个 PreparedStatement 对象:

1
PreparedStatement pstmt = con.prepareStatement( UPDATE 厂商登记 SET 厂商名 = ? WHERE 厂商编号 = ?);

对象 pstmt 包含语句 UPDATE 厂商登记 SET 厂商名 = ? WHERE 厂商编号 = ? ,该语句带两个 IN 参数占位符,它已发送给数据库,并由服务器为其执行作好了准备。

CallableStatement

概述

CallableStatement 用来运行 SQL 存储过程。存储过程是数据库中已经存在的 SQL 语句,它通过名字调用

CallableStatement 是 PreparedStatement 的子类。 CallableStatement 中定义的方法用于处理 OUT 参数或 INOUT 参数的输出部分:注册 OUT 参数的 JDBC 类型(一般 SQL 类型)、从这些参数中检索结果,或者检查所返回的值是否为 JDBC NULL。

创建 CallableStatement 对象

CallableStatement 对象是用 Connection.prepareCall 创建的。

以下代码创建 CallableStatement 对象,其中含有对存储过程 p1 的调用, con 为连接对象:

1
CallableStatement cstmt = con.prepareCall(call p1(?, ?));

其中 ? 占位符为 IN 、 OUT 还是 INOUT 参数,取决于存储过程 p1 。

详细介绍地址——JDBC语句对象

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
improt java.sql.*;
public class JDBCExample
{
public static void main(String args[])
{
try
{
Statement stmt;
ResultSet rs;
Class.forName(“com.mysql.jdbc.Driver”);
String url = “jdbc:mysql://localhost:3306/db”;
Connection con = DriverManager.getConnection(url,“root”,“1234”);
stmt = con.createStatement();
rs = stmt.executeQuery(“select name from empt where
age=‘25’”);
while(rs.next())
{
String name = rs.getString (“name”);
}
rs.close(); //关闭结果集对象
stmt.close(); //关闭SQL语句对象
con.close(); //关闭连接对象
}catch(Exception ex)
{
ex.printStackTrace();
}
}
}