?? storageprocedure.java
字號:
package book.database;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
/**
* 獲取、創(chuàng)建、調(diào)用數(shù)據(jù)庫的存儲過程
*/
public class StorageProcedure {
/**
* 列出數(shù)據(jù)庫中所有的存儲過程名
* @param con 數(shù)據(jù)庫的連接
*/
public static void listStorageProcedureName(Connection con){
try {
// 獲得數(shù)據(jù)庫的元數(shù)據(jù)
DatabaseMetaData md = con.getMetaData();
// 獲得所有的存儲過程的描述
ResultSet resultSet = md.getProcedures(null, null, "%");
//顯示存儲過程名,位于結(jié)果集的第三個字段
System.out.println("數(shù)據(jù)庫現(xiàn)有的存儲過程名為:");
while (resultSet.next()) {
String procName = resultSet.getString(3);
System.out.print(procName + "\t");
}
System.out.println();
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 調(diào)用存儲過程
* @param con
*/
public static void callStorageProcedure(Connection con){
CallableStatement cs = null;
try {
/*** 調(diào)用無參數(shù)的存儲過程 ***/
// 該存儲過程往數(shù)據(jù)表中插入一條數(shù)據(jù)
cs = con.prepareCall("{call my_insert_proc()}");
cs.execute();
/**** 調(diào)用有一個輸入?yún)?shù)的存儲過程 ****/
// 該存儲過程往數(shù)據(jù)表中插入一條數(shù)據(jù),其中有一列的值為參數(shù)值
cs = con.prepareCall("{call my_insert_proc1(?)}");
//設(shè)置參數(shù)
cs.setInt(1, 18);
// 執(zhí)行
cs.execute();
/*** 調(diào)用有一個輸出參數(shù)的存儲過程 ****/
// 該存儲過程返回數(shù)據(jù)表中的記錄數(shù)
cs = con.prepareCall("{call my_count_proc1(?)}");
// 注冊輸出參數(shù)的類型
cs.registerOutParameter(1, Types.INTEGER);
// 執(zhí)行
cs.execute();
// 獲取輸出參數(shù)的值
int outParam = cs.getInt(1);
System.out.println("my_count_proc1() 執(zhí)行結(jié)果:" + outParam);
/*** 調(diào)用有一個輸入?yún)?shù)和一個輸出參數(shù)的存儲過程 ***/
// 該存儲過程返回數(shù)據(jù)表中score>輸入?yún)?shù)的記錄數(shù)
cs = con.prepareCall("{call my_count_proc(?,?)}");
// 注冊輸出參數(shù)的類型
cs.registerOutParameter(2, Types.INTEGER);
// 設(shè)置輸入?yún)?shù)的值
cs.setInt(1, 90);
// 執(zhí)行
cs.execute();
// 獲取輸出參數(shù)的值
outParam = cs.getInt(2);
System.out.println("my_count_proc 執(zhí)行結(jié)果:" + outParam);
} catch (SQLException e) {
e.printStackTrace();
} finally {
OperateDB.closeStatement(cs);
}
}
public static void main(String[] args) throws ClassNotFoundException,
SQLException {
String dbName = "studentdb";
String userName = "test";
String password = "test";
Connection con = null;
try {
// 獲得數(shù)據(jù)庫連接
con = DBConnector.getMySQLConnection(null, null, null, dbName,
userName, password);
// 列出數(shù)據(jù)庫的所有存儲過程名
StorageProcedure.listStorageProcedureName(con);
// 調(diào)用存儲過程
StorageProcedure.callStorageProcedure(con);
} catch (ClassNotFoundException e1) {
throw e1;
} catch (SQLException e2) {
throw e2;
} finally {
// 關(guān)閉數(shù)據(jù)庫連接
OperateDB.closeConnection(con);
}
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -