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.