JDBC CallableStatement實例

以下是使用CallableStatement以及MySQL存儲過程:getEmpName()的示例 -

確保已經在EMP資料庫中創建了getEmpName()存儲過程,可以使用MySQL查詢來創建 -

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 ;

查詢emp資料庫的所有存儲過程,如下語句 -

mysql>  select `name` from mysql.proc where db = 'emp' and `type` = 'PROCEDURE';
+------------+
| name       |
+------------+
| getEmpName |
+------------+
1 row in set (0.00 sec)

此示例代碼是基於前面章節中完成的環境和數據庫設置編寫的。複製以下示例代碼到JDBCCallableStatement.java中編譯,並運行如下 -


//STEP 1. Import required packages
import java.sql.*;

public class JDBCCallableStatement {
   // JDBC driver name and database URL
   static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
   static final String DB_URL = "jdbc:mysql://localhost/EMP";

   //  Database credentials
   static final String USER = "root";
   static final String PASS = "123456";

   public static void main(String[] args) {
   Connection conn = null;
   CallableStatement stmt = null;
   try{
      //STEP 2: Register JDBC driver
      Class.forName("com.mysql.jdbc.Driver");

      //STEP 3: Open a connection
      System.out.println("Connecting to database...");
      conn = DriverManager.getConnection(DB_URL,USER,PASS);

      //STEP 4: Execute a query
      System.out.println("Creating statement...");
      String sql = "{call getEmpName (?, ?)}";
      stmt = conn.prepareCall(sql);

      //Bind IN parameter first, then bind OUT parameter
      int empID = 102;
      stmt.setInt(1, empID); // This would set ID as 102
      // Because second parameter is OUT so register it
      stmt.registerOutParameter(2, java.sql.Types.VARCHAR);

      //Use execute method to run stored procedure.
      System.out.println("Executing stored procedure..." );
      stmt.execute();

      //Retrieve employee name with getXXX method
      String empName = stmt.getString(2);
      System.out.println("Emp Name with ID:" +
               empID + " is " + empName);
      stmt.close();
      conn.close();
   }catch(SQLException se){
      //Handle errors for JDBC
      se.printStackTrace();
   }catch(Exception e){
      //Handle errors for Class.forName
      e.printStackTrace();
   }finally{
      //finally block used to close resources
      try{
         if(stmt!=null)
            stmt.close();
      }catch(SQLException se2){
      }// nothing we can do
      try{
         if(conn!=null)
            conn.close();
      }catch(SQLException se){
         se.printStackTrace();
      }//end finally try
   }//end try
   System.out.println("Goodbye!");
}//end main
}//end JDBCExample

現在編譯上面例子中的代碼,如下 -

F:\worksp\jdbc>
F:\worksp\jdbc>javac -Djava.ext.dirs=F:\worksp\jdbc\libs JDBCCallableStatement.java

運行JDBCCallableStatement時,會產生以下結果 -

F:\worksp\jdbc>java -Djava.ext.dirs=F:\worksp\jdbc\libs JDBCCallableStatement
Connecting to database...
Wed May 31 03:49:50 CST 2017 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
Creating statement...
Executing stored procedure...
Emp Name with ID:102 is Xueyou
Goodbye!

F:\worksp\jdbc>

上一篇: JDBC Statements, PreparedStatement和CallableStatement語句 下一篇: JDBC結果集