JDBC中有三种类型的语句,即Statement,Prepared Statement,Callable statement。
Statement接口代表静态SQL语句。它可以帮助您使用Java创建通用SQL语句。
您可以使用Connection接口的createStatement()方法创建此接口的对象。
通过调用createStatement()方法创建一条语句,如下所示。
Statement stmt = null; try { stmt = conn.createStatement( ); . . . } catch (SQLException e) { . . . } finally { . . . }
一旦你创建了Statement对象可以使用的execute方法之一,即执行它execute()
,executeUpdate()
和,executeQuery()
。
execute():此方法用于执行SQL DDL语句,它返回一个布尔值,该布尔值指定是否可以检索ResultSet对象。
executeUpdate():此方法用于执行诸如插入,更新,删除之类的语句。它返回一个整数值,表示受影响的行数。
executeQuery():此方法用于执行返回表格数据的语句(示例SELECT语句)。它返回ResultSet类的对象。
该PreparedStatement的接口扩展了Statement接口。它表示可以多次执行的预编译SQL语句。这接受参数化的SQL查询,您可以将0个或多个参数传递给此查询。
最初,此语句使用占位符“ ?”(而不是参数),稍后,您可以使用PreparedStatement接口的setXXX()方法将参数动态传递给这些参数。
您可以使用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()
等。对设定值到所准备的语句的占位符。
这些方法接受两个参数,一个是代表占位符的放置索引的整数值,另一个是int或String或float等…表示您需要在该特定位置插入的值。
创建准备好的语句对象(带有占位符)后,可以使用setter方法将值设置为准备好的语句的占位符,如下所示:
pstmt.setString(1, "Amit"); pstmt.setInt(2, 3000); pstmt.setString(3, "Hyderabad");
一旦你已经创建的PreparedStatement对象,你可以使用它的一个执行的execute()的方法的PreparedStatement接口,即execute()
,executeUpdate()
和executeQuery()
。
execute():此方法在当前准备好的语句对象中执行常规的静态SQL语句,并返回布尔值。
executeQuery():此方法执行当前准备好的语句并返回ResultSet对象。
executeUpdate():此方法在当前的Prepared语句中执行SQL DML语句,例如插入更新或删除。它返回一个整数值,表示受影响的行数。
CallableStatement接口提供方法来执行存储过程。由于JDBC API提供了存储过程SQL转义语法,因此您可以用一种标准方式调用所有RDBMS的存储过程。
您可以使用Connection接口的prepareCall()方法创建CallableStatement(接口)的对象。
此方法接受表示查询的字符串变量来调用存储过程,并返回CallableStatement对象。
CallableStatement可以具有输入参数或输出参数,或两者都有。要将输入参数传递给过程调用,您可以使用占位符,并使用CallableStatement接口提供的setter方法(setInt()setString()
,,setFloat()
)为这些参数设置值。
假设您在数据库中有一个名为myProcedure的过程,则可以将可调用语句准备为:
//Preparing a CallableStatement CallableStatement cstmt = con.prepareCall("{call myProcedure(?, ?, ?)}");
您可以使用setter方法将值设置为过程调用的输入参数。
它们接受两个参数,一个是代表输入参数放置索引的整数值,另一个是int或String或float等…表示将输入参数传递给过程所需的值。
注意:除了索引以外,您还可以使用String格式传递参数名称。
cstmt.setString(1, "Raghav"); cstmt.setInt(2, 3000); cstmt.setString(3, "Hyderabad");
创建CallableStatement对象后,可以使用execute()方法之一执行它。
cstmt.execute();