⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 storageprocedure.java

📁 本代码以J2SE 5.0为开发环境
💻 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 + -