JDBC中的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));

然后,您应该可以使用“准备好的语句”向其中插入值,如下所示。

//创建一个准备好的语句

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");

pstmt.setString(1, "Kalyan");

pstmt.setInt(2, 4000);

pstmt.setString(3, "Vishakhapatnam");

pstmt.setString(1, "Renuka");

pstmt.setInt(2, 5000);

pstmt.setString(3, "Delhi");

pstmt.setString(1, "Archana");

pstmt.setInt(2, 15000);

pstmt.setString(3, "Mumbai");

执行准备好的语句

创建PreparedStatement对象后,可以使用PreparedStatement接口的execute()方法之一执行它,即execute(),executeUpdate()和executeQuery()

  • execute():此方法在当前准备好的语句对象中执行常规的静态SQL语句,并返回布尔值。

  • executeQuery():此方法执行当前准备好的语句并返回ResultSet对象。

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

您可以执行上面创建的准备好的语句,如下所示:

示例

在此示例中,我们尝试使用准备好的语句将值插入名为Employees的表中。

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.SQLException;

public class PreparedStatementExample {

   public static void main(String args[]) throws SQLException {

      //注册驱动程序

      DriverManager.registerDriver(new com.mysql.jdbc.Driver());

      //获得连接

      String mysqlUrl = "jdbc:mysql://localhost/testdb";

      Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");

      System.out.println("Connection established......");

      //创建一个准备好的语句

      String query = "INSERT INTO Employees(Name, Salary, Location) VALUES (?, ?, ?)";

      PreparedStatement pstmt = con.prepareStatement(query);

      pstmt.setString(1, "Amit");

      pstmt.setInt(2, 3000);

      pstmt.setString(3, "Hyderabad");

      pstmt.setString(1, "Kalyan");

      pstmt.setInt(2, 4000);

      pstmt.setString(3, "Vishakhapatnam");

      pstmt.setString(1, "Renuka");

      pstmt.setInt(2, 5000);

      pstmt.setString(3, "Delhi");

      pstmt.setString(1, "Archana");

      pstmt.setInt(2, 15000);

      pstmt.setString(3, "Mumbai");

      int num = pstmt.executeUpdate();

      System.out.println("Rows inserted ....");

   }

}

输出结果

Connection established......

Number of rows inserted: 1

如果您验证数据库,则可以观察表中插入的值,如下所示:

+---------+--------+----------------+

| Name    | Salary | Location       |

+---------+--------+----------------+

| Amit    | 30000  | Hyderabad      |

| Kalyan  | 40000  | Vishakhapatnam |

| Renuka  | 50000  | Delhi          |

| Archana | 15000  | Mumbai         |

+---------+--------+----------------+

5 rows in set (0.00 sec)

以上是 JDBC中的PreparedStatement是什么? 的全部内容, 来源链接: utcz.com/z/340958.html

回到顶部