📄 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;
/**
* 获取、创建、调用数据库的存储过程
*/
public class StorageProcedure {
/**
* 列出数据库中所有的存储过程名
* @param con 数据库的连接
*/
public static void listStorageProcedureName(Connection con){
try {
// 获得数据库的元数据
DatabaseMetaData md = con.getMetaData();
// 获得所有的存储过程的描述
ResultSet resultSet = md.getProcedures(null, null, "%");
//显示存储过程名,位于结果集的第三个字段
System.out.println("数据库现有的存储过程名为:");
while (resultSet.next()) {
String procName = resultSet.getString(3);
System.out.print(procName + "\t");
}
System.out.println();
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 调用存储过程
* @param con
*/
public static void callStorageProcedure(Connection con){
CallableStatement cs = null;
try {
/*** 调用无参数的存储过程 ***/
// 该存储过程往数据表中插入一条数据
cs = con.prepareCall("{call my_insert_proc()}");
cs.execute();
/**** 调用有一个输入参数的存储过程 ****/
// 该存储过程往数据表中插入一条数据,其中有一列的值为参数值
cs = con.prepareCall("{call my_insert_proc1(?)}");
//设置参数
cs.setInt(1, 18);
// 执行
cs.execute();
/*** 调用有一个输出参数的存储过程 ****/
// 该存储过程返回数据表中的记录数
cs = con.prepareCall("{call my_count_proc1(?)}");
// 注册输出参数的类型
cs.registerOutParameter(1, Types.INTEGER);
// 执行
cs.execute();
// 获取输出参数的值
int outParam = cs.getInt(1);
System.out.println("my_count_proc1() 执行结果:" + outParam);
/*** 调用有一个输入参数和一个输出参数的存储过程 ***/
// 该存储过程返回数据表中score>输入参数的记录数
cs = con.prepareCall("{call my_count_proc(?,?)}");
// 注册输出参数的类型
cs.registerOutParameter(2, Types.INTEGER);
// 设置输入参数的值
cs.setInt(1, 90);
// 执行
cs.execute();
// 获取输出参数的值
outParam = cs.getInt(2);
System.out.println("my_count_proc 执行结果:" + 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 {
// 获得数据库连接
con = DBConnector.getMySQLConnection(null, null, null, dbName,
userName, password);
// 列出数据库的所有存储过程名
StorageProcedure.listStorageProcedureName(con);
// 调用存储过程
StorageProcedure.callStorageProcedure(con);
} catch (ClassNotFoundException e1) {
throw e1;
} catch (SQLException e2) {
throw e2;
} finally {
// 关闭数据库连接
OperateDB.closeConnection(con);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -