jdbc操作存储过程
本篇讲述如何使用JDBC来调用MySQL数据库中的存储过程。建议在学习如何使用JDBC调用存储过程前,请先了解如何在数据库中使用存储过程。
什么是存储过程:
存储过程是指在数据库系统中,一组为了完成特定功能的SQL语句集,存储在数据库中,经过第一次编译后以后再调用任意次都不需要重新编译了。说白了就是一堆SQL语句的合并,中间加了点逻辑控制,俗称为数据库中的函数。在一些金融等大型企业中,基本都是由内部人员编写好存储过程,然后由外部程序员调用存储过程,因为内部数据逻辑处理方式涉及商业机密等等。
也就是说我们现在有两种方式来处理数据库中的数据:
一是通过JDBC从数据库中取出数据然后通过业务层编写处理数据的逻辑代码
二是在数据库中定义数据的存储过程,在这个存储过程中完成对数据的逻辑操作,就好比数据库中的函数,而我们在Java程序中只要调用数据库中的这个存储过程即可。
首先说一下整体的步骤让大家心里有个底:
- 加载驱动
Class.forName - 创建数据库连接
conn= DriverManager.getConnection - 创建处理块
CallableStatement cs = conn.prepareCall - 放入参数
prepareCall.setString - 执行存储过程
prepareCall.execute() - 关闭连接
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版权协议,转载请附上原文出处链接和本声明。