JDBC中的语句类型是什么?

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对象

一旦你创建了Statement对象可以使用的execute方法之一,即执行它execute()executeUpdate()和,executeQuery()

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

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

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

准备好的声明

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()等。对设定值到所准备的语句的占位符。

这些方法接受两个参数,一个是代表占位符的放置索引的整数值,另一个是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

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

创建一个CallableStatement

您可以使用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();