下面的示例使用 CallableStatement 和下面的 getEmpName () MySQL 存儲(chǔ)過(guò)程-
請(qǐng)確保已在 EMP 數(shù)據(jù)庫(kù)中創(chuàng)建此存儲(chǔ)過(guò)程。你可以使用 MySQL 查詢?yōu)g覽器來(lái)完成它。
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ù)庫(kù)設(shè)置編寫的。
復(fù)制并粘貼以下示例到JDBCExample.java中,如下編譯并運(yùn)行:
//步驟1.導(dǎo)入所需的軟件包
import java.sql.*;
public class JDBCExample {
// JDBC驅(qū)動(dòng)程序名稱和數(shù)據(jù)庫(kù)URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost/EMP";
// 數(shù)據(jù)庫(kù)憑證
static final String USER = "username";
static final String PASS = "password";
public static void main(String[] args) {
Connection conn = null;
CallableStatement stmt = null;
try{
//步驟2:注冊(cè)JDBC驅(qū)動(dòng)程序
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); // 這會(huì)將ID設(shè)置為102
// 因?yàn)榈诙€(gè)參數(shù)是OUT,所以注冊(cè)它
stmt.registerOutParameter(2, java.sql.Types.VARCHAR);
//使用execute方法運(yùn)行存儲(chǔ)過(guò)程。
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錯(cuò)誤
se.printStackTrace();
}catch(Exception e){
//處理Class.forName的錯(cuò)誤
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)行時(shí)JDBCExample,它將產(chǎn)生以下結(jié)果-
C:\>java JDBCExample Connecting to database... Creating statement... Executing stored procedure... Emp Name with ID:102 is Zaid Goodbye! C:\>