JDBC - 预处理语句对象示例



以下示例演示了如何使用 PreparedStatement 以及打开和关闭语句:

此示例代码基于前面章节中完成的环境和数据库设置。

使用 PreparedStatement 更新整数值示例

在这个例子中,我们有五个静态字符串,包含数据库连接 URL、用户名、密码、SELECT 查询和 UPDATE 查询。UPDATE 查询中包含年龄和 ID 的占位符,这些占位符将由 PreparedStatement 填充。现在,使用 DriverManager.getConnection() 方法,我们准备了一个数据库连接。连接准备就绪后,我们使用 connection.prepareStatement() 方法创建了一个 PreparedStatement 对象。现在,使用 setInt() 方法,我们相应地设置了年龄和 ID 的占位符值。

使用 statement.executeUpdate(),我们运行了更新查询,修改的行数存储在 rows 变量中。最后,使用 statement.executeQuery() 执行 SELECT 查询并将结果存储在结果集中。现在迭代结果集并打印每条记录以检查更新后的内容。

将以下示例复制并粘贴到 JDBCPreparedStatementExample.java 中,编译并运行如下:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class JDBCPreparedStatementExample {
   static final String DB_URL = "jdbc:mysql:///TUTORIALSPOINT";
   static final String USER = "guest";
   static final String PASS = "guest123";
   static final String QUERY = "SELECT id, first, last, age FROM Employees";
   static final String UPDATE_QUERY = "UPDATE Employees set age=? WHERE id=?";

   public static void main(String[] args) {
      // Open a connection
      try(Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
         PreparedStatement stmt = conn.prepareStatement(UPDATE_QUERY);
      ) {		      
         // Bind values into the parameters.
         stmt.setInt(1, 35);  // This would set age
         stmt.setInt(2, 102); // This would set ID

         // Let us update age of the record with ID = 102;
         int rows = stmt.executeUpdate();
         System.out.println("Rows impacted : " + rows );

         // Let us select all the records and display them.
         ResultSet rs = stmt.executeQuery(QUERY);		      

         // Extract data from result set
         while (rs.next()) {
            // Retrieve by column name
            System.out.print("ID: " + rs.getInt("id"));
            System.out.print(", Age: " + rs.getInt("age"));
            System.out.print(", First: " + rs.getString("first"));
            System.out.println(", Last: " + rs.getString("last"));
         }
         rs.close();
      } catch (SQLException e) {
         e.printStackTrace();
      } 
   }
}

输出

现在,我们按如下方式编译上述示例:

C:\>javac JDBCPreparedStatementExample.java
C:\>

运行 **JDBCPreparedStatementExample** 时,会产生以下结果:

C:\>java JDBCPreparedStatementExample
Return value is : false
Rows impacted : 1
ID: 100, Age: 18, First: Zara, Last: Ali
ID: 101, Age: 25, First: Mehnaz, Last: Fatma
ID: 102, Age: 35, First: Zaid, Last: Khan
ID: 103, Age: 30, First: Sumit, Last: Mittal
C:\>

使用 PreparedStatement 更新字符串值示例

在这个例子中,我们有五个静态字符串,包含数据库连接 URL、用户名、密码、SELECT 查询和 UPDATE 查询。UPDATE 查询中包含部门和 ID 的占位符,这些占位符将由 PreparedStatement 填充。现在,使用 DriverManager.getConnection() 方法,我们准备了一个数据库连接。连接准备就绪后,我们使用 connection.prepareStatement() 方法创建了一个 PreparedStatement 对象。现在,使用 setString() 方法设置部门的占位符值,并使用 setInt() 方法设置 ID。

使用 statement.executeUpdate(),我们运行了更新查询,修改的行数存储在 rows 变量中。最后,使用 statement.executeQuery() 执行 SELECT 查询并将结果存储在结果集中。现在迭代结果集并打印每条记录以检查更新后的内容。

将以下示例复制并粘贴到 JDBCPreparedStatementExample.java 中,编译并运行如下:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class JDBCPreparedStatementExample {
   static final String DB_URL = "jdbc:mysql:///TUTORIALSPOINT";
   static final String USER = "guest";
   static final String PASS = "guest123";
   static final String QUERY = "SELECT StudentID, LastName, FirstName, Dept FROM Students";
   static final String UPDATE_QUERY = "UPDATE Students set Dept=? WHERE studentid=?";

   public static void main(String[] args) {
      
        try{
          // Open a connection
          Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
         PreparedStatement pstmt = conn.prepareStatement(UPDATE_QUERY);
              
         // Bind values into the parameters.
         pstmt.setString(1, "Mathematics");  
         pstmt.setInt(2, 1000); 

         // Updating Dept of the record with StudentID = 1000
         int rows = pstmt.executeUpdate();
         System.out.println("Rows impacted : " + rows );

         // Let us select all the records and display them.
         ResultSet rs = pstmt.executeQuery(QUERY);		      

         // Extract data from result set
         while (rs.next()) {
            // Retrieve by column name
            System.out.print("ID: " + rs.getInt("StudentID"));
            System.out.print(", LastName: " + rs.getString("LastName"));
            System.out.print(", FirstName: " + rs.getString("FirstName"));
            System.out.println(", Dept: " + rs.getString("Dept"));
         }
         rs.close();
         pstmt.close();
      } catch (SQLException e) {
         e.printStackTrace();
      } 
      
   }
}

输出

现在,我们按如下方式编译上述示例:

C:\>javac JDBCPreparedStatementExample.java
C:\>

运行 **JDBCPreparedStatementExample** 时,会产生以下结果:

C:\>java JDBCPreparedStatementExample

Rows impacted : 1
ID: 1000, LastName: Agarwal, FirstName: Bonny, Dept: Mathematics
ID: 1001, LastName: Pandey, FirstName: Amit, Dept: Physics
ID: 1002, LastName: Kumar, FirstName: Shefali, Dept: English
ID: 1004, LastName: Ali, FirstName: Mohammed, Dept: Mathematics
ID: 1005, LastName: Kumar, FirstName: Kishore, Dept: Biology

C:\>
jdbc-statements.htm
广告
© . All rights reserved.