JDBC CallableStatement 對象示例

下面的示例使用 CallableStatement 和下面的 getEmpName () MySQL 存儲過程-

請確保已在 EMP 數(shù)據(jù)庫中創(chuàng)建此存儲過程。你可以使用 MySQL 查詢?yōu)g覽器來完成它。

DELIMITER $$

DROP PROCEDURE IF EXISTS `EMP`.`getEmpName` $$
CREATE PROCEDURE `EMP`.`getEmpName` 
   (IN EMP_ID INT, OUT EMP_FIRST VARCHAR(255))
BEGIN
   SELECT first INTO EMP_FIRST
   FROM Employees
   WHERE ID = EMP_ID;
END $$

DELIMITER ;

該示例代碼是根據(jù)前幾章中的環(huán)境和數(shù)據(jù)庫設(shè)置編寫的。

復(fù)制并粘貼以下示例到JDBCExample.java中,如下編譯并運(yùn)行:

//步驟1.導(dǎo)入所需的軟件包
import java.sql.*;

public class JDBCExample {
   // JDBC驅(qū)動程序名稱和數(shù)據(jù)庫URL
   static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
   static final String DB_URL = "jdbc:mysql://localhost/EMP";

   //  數(shù)據(jù)庫憑證
   static final String USER = "username";
   static final String PASS = "password";
   
   public static void main(String[] args) {
   Connection conn = null;
   CallableStatement stmt = null;
   try{
      //步驟2:注冊JDBC驅(qū)動程序
      Class.forName("com.mysql.jdbc.Driver");

      //步驟3:建立連接
      System.out.println("Connecting to database...");
      conn = DriverManager.getConnection(DB_URL,USER,PASS);

      //步驟4:執(zhí)行查詢
      System.out.println("Creating statement...");
      String sql = "{call getEmpName (?, ?)}";
      stmt = conn.prepareCall(sql);
      
      //首先綁定IN參數(shù),然后綁定OUT參數(shù)
      int empID = 102;
      stmt.setInt(1, empID); // 這會將ID設(shè)置為102
      // 因?yàn)榈诙€參數(shù)是OUT,所以注冊它
      stmt.registerOutParameter(2, java.sql.Types.VARCHAR);
      
      //使用execute方法運(yùn)行存儲過程。
      System.out.println("Executing stored procedure..." );
      stmt.execute();

      //使用getXXX方法檢索員工姓名
      String empName = stmt.getString(2);
      System.out.println("Emp Name with ID:" + 
               empID + " is " + empName);
      stmt.close();
      conn.close();
   }catch(SQLException se){
      //處理JDBC錯誤
      se.printStackTrace();
   }catch(Exception e){
      //處理Class.forName的錯誤
      e.printStackTrace();
   }finally{
      //用于關(guān)閉資源
      try{
         if(stmt!=null)
            stmt.close();
      }catch(SQLException se2){
      
      }
      try{
         if(conn!=null)
            conn.close();
      }catch(SQLException se){
         se.printStackTrace();
      }
   }
   System.out.println("Goodbye!");
}//結(jié)束main
}//結(jié)束JDBCExample

現(xiàn)在讓我們編譯上面的示例,如下所示:

C:\>javac JDBCExample.java
C:\>

運(yùn)行時JDBCExample,它將產(chǎn)生以下結(jié)果-

C:\>java JDBCExample
Connecting to database...
Creating statement...
Executing stored procedure...
Emp Name with ID:102 is Zaid
Goodbye!
C:\>
丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清