JDBC操作存储过程

jdbc操作存储过程

本篇讲述如何使用JDBC来调用MySQL数据库中的存储过程。建议在学习如何使用JDBC调用存储过程前,请先了解如何在数据库中使用存储过程。


什么是存储过程:

存储过程是指在数据库系统中,一组为了完成特定功能SQL语句集,存储在数据库中,经过第一次编译后以后再调用任意次都不需要重新编译了。说白了就是一堆SQL语句的合并,中间加了点逻辑控制,俗称为数据库中的函数。在一些金融等大型企业中,基本都是由内部人员编写好存储过程,然后由外部程序员调用存储过程,因为内部数据逻辑处理方式涉及商业机密等等。

也就是说我们现在有两种方式来处理数据库中的数据:

一是通过JDBC从数据库中取出数据然后通过业务层编写处理数据的逻辑代码

二是在数据库中定义数据的存储过程,在这个存储过程中完成对数据的逻辑操作,就好比数据库中的函数,而我们在Java程序中只要调用数据库中的这个存储过程即可。


首先说一下整体的步骤让大家心里有个底:

  1. 加载驱动Class.forName
  2. 创建数据库连接conn= DriverManager.getConnection
  3. 创建处理块CallableStatement cs = conn.prepareCall
  4. 放入参数prepareCall.setString
  5. 执行存储过程prepareCall.execute()
  6. 关闭连接

public class JdbcProcedureDao {
	public void myProcedure(String befor,String etldt){		//定义方法myProcedure,参数:before,eventkey前缀,etldt,导数时间
		Connection conn=null;
		CallableStatement prepareCall=null;
		try {
			Class.forName("com.mysql.jdbc.Driver");				//获取驱动
			 conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/db214", "root", "123456");
			prepareCall = conn.prepareCall("{call p47_emp(?, ?)}");	//存储过程statement
			prepareCall.setString(1, befor);											//放入第一个参数
			prepareCall.setString(2, etldt);											//放入第二个参数,当前时间
			prepareCall.execute();								//执行存储过程
		} catch (ClassNotFoundException | SQLException e) {
			e.printStackTrace();
		}finally {
			if (prepareCall!=null) {
				try {
					prepareCall.close();						//关闭statement
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			if(conn!=null){
				try {
					conn.close();								//关闭链接
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
	}
	

	public static void main(String[] args) {
		JdbcProcedureDao jp=new JdbcProcedureDao();
		SimpleDateFormat sdf=new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");			//时间格式化
		String mytime = sdf.format(new Date());										//格式化当前时间
		jp.myProcedure("001-", mytime);												//调用方法myProcedure,传递实参:001-,2018-09-03 14:43:28
	}
}


版权声明:本文为qq_38129062原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。