JDBC中的语句类型有哪些?


JDBC中有三种类型的语句:Statement、PreparedStatement和CallableStatement。

Statement

Statement接口表示静态SQL语句。它帮助你使用Java创建通用的SQL语句。

创建Statement

你可以使用**Connection**接口的**createStatement()**方法创建此接口的对象。

如下所示调用**createStatement()**方法创建Statement:

Statement stmt = null;
try {
   stmt = conn.createStatement( );
   . . .
}
catch (SQLException e) {
   . . .
}
finally {
   . . .
}

执行Statement对象

创建Statement对象后,可以使用其中一个execute方法执行它,这些方法分别是execute()、executeUpdate()和executeQuery()。

  • **execute():** 此方法用于执行SQL DDL语句,它返回一个布尔值,指定是否可以检索ResultSet对象。

  • **executeUpdate():** 此方法用于执行插入、更新、删除等语句。它返回一个整数值,表示受影响的行数。

  • **executeQuery():** 此方法用于执行返回表格数据的语句(例如SELECT语句)。它返回ResultSet类的对象。

PreparedStatement

**PreparedStatement**接口扩展了Statement接口。它表示一个预编译的SQL语句,可以多次执行。它接受参数化的SQL查询,你可以向此查询传递0个或多个参数。

最初,此语句使用占位符“**?**”代替参数,之后,你可以使用**PreparedStatement**接口的**setXXX()**方法动态地向这些占位符传递参数。

创建PreparedStatement

你可以使用Connection接口的**prepareStatement()**方法创建一个**PreparedStatement**(接口)对象。此方法接受一个查询(参数化的)并返回一个PreparedStatement对象。

调用此方法时,Connection对象会将给定的查询发送到数据库进行编译和保存。只有在查询成功编译后,它才会返回对象。

为了编译查询,数据库不需要任何值,因此,你可以在查询中的值位置使用(零个或多个)**占位符**(问号“?”)。

例如,如果你的数据库中有一个名为**Employee**的表,使用以下查询创建:

CREATE TABLE Employee(Name VARCHAR(255), Salary INT NOT NULL, Location
VARCHAR(255));

那么,你可以使用**PreparedStatement**向其中插入值,如下所示:

//Creating a Prepared Statement
String query="INSERT INTO Employee(Name, Salary, Location)VALUES(?, ?, ?)";
Statement pstmt = con.prepareStatement(query);

为占位符设置值

**PreparedStatement**接口提供了一些setter方法,例如setInt()、setFloat()、setArray()、setDate()、setDouble()等,用于为PreparedStatement的占位符设置值。

这些方法接受两个参数,一个是表示占位符位置索引的整数值,另一个是int、String、float等表示你需要在该特定位置插入的值。

创建PreparedStatement对象(带有占位符)后,你可以使用setter方法为PreparedStatement的占位符设置值,如下所示:

pstmt.setString(1, "Amit");
pstmt.setInt(2, 3000);
pstmt.setString(3, "Hyderabad");

执行PreparedStatement

创建**PreparedStatement**对象后,可以使用**PreparedStatement**接口的其中一个**execute()**方法执行它,这些方法分别是execute()、executeUpdate()和executeQuery()。

  • **execute():** 此方法执行当前PreparedStatement对象中的普通静态SQL语句,并返回一个布尔值。

  • **executeQuery():** 此方法执行当前PreparedStatement并返回一个**ResultSet**对象。

  • **executeUpdate():** 此方法在当前PreparedStatement中执行SQL DML语句,例如插入、更新或删除。它返回一个整数值,表示受影响的行数。

CallableStatement

**CallableStatement**接口提供执行存储过程的方法。由于JDBC API提供了一个存储过程SQL转义语法,你可以以单一标准方式调用所有RDBMS的存储过程。

创建CallableStatement

你可以使用**Connection**接口的**prepareCall()**方法创建一个**CallableStatement**(接口)对象。

此方法接受一个字符串变量,表示调用存储过程的查询,并返回一个**CallableStatement**对象。

CallableStatement可以有输入参数、输出参数或两者兼有。要向过程调用传递输入参数,可以使用占位符并使用CallableStatement接口提供的setter方法(setInt()、setString()、setFloat())为这些占位符设置值。

假设你的数据库中有一个名为myProcedure的过程,你可以准备一个CallableStatement,如下所示:

//Preparing a CallableStatement
CallableStatement cstmt = con.prepareCall("{call myProcedure(?, ?, ?)}");

为输入参数设置值

你可以使用setter方法为过程调用的输入参数设置值。

这些方法接受两个参数,一个是表示输入参数位置索引的整数值,另一个是int、String、float等表示你需要传递给过程的输入参数的值。

**注意:**除了索引之外,你还可以使用字符串格式传递参数的名称。

cstmt.setString(1, "Raghav");
cstmt.setInt(2, 3000);
cstmt.setString(3, "Hyderabad");

执行CallableStatement

创建CallableStatement对象后,可以使用其中一个**execute()**方法执行它。

cstmt.execute();

更新于:2019年7月30日

10K+ 浏览量

启动你的职业生涯

完成课程获得认证

开始学习
广告