如何使用JDBC在PreparedStatement的where子句中传递值?

使用PreparedStatement使用Where子句执行语句。通过将子句中的值替换为占位符“?”来准备查询 并将此查询作为参数传递给prepareStatement()方法。

String query = "SELECT * FROM mobile_sales WHERE unit_sale >= ?";
//创建PreparedStatement对象
PreparedStatement pstmt = con.prepareStatement(query);

稍后,使用PreparedStatement接口的setXXX()方法将值设置为占位符。

pstmt.setInt(1, 4000);
ResultSet rs = pstmt.executeQuery();

示例

让我们使用CREATE语句在MySQL数据库中创建一个名称为mobile_sales的表,如下所示-

CREATE TABLE mobile_sales (
   mobile_brand VARCHAR(255),
   unit_sale INT
);

现在,我们将使用INSERT语句在mobile_sales表中插入11条记录-

insert into mobile_sales values('Iphone', 3000);
insert into mobile_sales values('Samsung', 4000);
insert into mobile_sales values('Nokia', 5000);
insert into mobile_sales values('Vivo', 1500);
insert into mobile_sales values('Oppo', 900);
insert into mobile_sales values('MI', 6400);
insert into mobile_sales values('MotoG', 4360);
insert into mobile_sales values('Lenovo', 4100);
insert into mobile_sales values('RedMI', 4000);
insert into mobile_sales values('MotoG', 4360);
insert into mobile_sales values('OnePlus', 6334);

以下JDBC程序从mobile_sales表检索记录,其中单位销售值大于或等于4000。

在此示例中,我们使用PreparedStatement执行SELECT查询,并使用setter方法在WHERE子句中设置值。

示例

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class PreparedStatement_WhereClause {
   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......");
      //查询以获取单位销售额大于(或等于)4000的移动品牌
      String query = "SELECT * FROM mobile_sales WHERE unit_sale >= ?";
      //创建PreparedStatement对象
      PreparedStatement pstmt = con.prepareStatement(query);
      pstmt.setInt(1, 4000);
      ResultSet rs = pstmt.executeQuery();
      System.out.println("Mobile brands with unit sale greater or equal to 4000: ");
      while(rs.next()) {
         System.out.print("Name: "+rs.getString("mobile_brand")+", ");
         System.out.print("Customer Name: "+rs.getString("unit_sale"));
         System.out.println();
      }
   }
}

输出结果

Connection established......
Mobile brands with unit sale greater or equal to 4000:
Name: Samsung, Customer Name: 4000
Name: Nokia, Customer Name: 5000
Name: MI, Customer Name: 6400
Name: MotoG, Customer Name: 4360
Name: Lenovo, Customer Name: 4100
Name: RedMi, Customer Name: 4000
Name: MotoG, Customer Name: 4360
Name: OnePlus, Customer Name: 6334