存储过程相当于数据库中的函数或方法。下面我会举例来说明如何使用JDBC调用存储过程。
首先,编写存储过程(参看MySQL文档)。
然后,得到CallableStatement对象,并调用存储过程。
package cn.liayun.demo;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import cn.liayun.utils.JdbcUtils;
public class Demo5 {
/**
* 调用存储过程
* @param args
* @throws SQLException
*/
public static void main(String[] args) throws SQLException {
Connection conn = null;
CallableStatement st = null;
ResultSet rs = null;
try {
conn = JdbcUtils.getConnection();
// 得到CallableStatement,并调用存储过程
st = conn.prepareCall("{call demoSp(?,?)}");
// 设置参数,注册返回值,得到输出
st.setString(1, "liayun");
st.registerOutParameter(2, Types.VARCHAR);// 告诉MySQL驱动输出的是什么类型,即数据库的类型,Types类中有所有数据库的常见类型。
st.execute();//执行存储过程
System.out.println(st.getString(2));
} finally {
JdbcUtils.release(conn, st, rs);
}
}
}
最后,运行以上程序,Eclipse控制台打印如下内容:
既然我们学了存储过程,那么将来对数据进行处理就有2种选择了。
- 在数据库里面写存储过程,对数据进行处理,然后在Java程序里面直接调用存储过程,获取到处理完后的数据,直接显示即可;
- 不在数据库里面写存储过程,通过JDBC获取数据库中的数据,获取到了之后拿到程序里面写方法来处理,处理完后再显示。
什么情况下我们需要在数据库里面写存储过程来处理数据呢?银行的数据处理一般用存储过程来实现。银行那些业务都是写好存储过程后给你,你去调用存储过程即可。在金融证劵领域用到的特别多,金融证劵领域的开发是不会用Hibernate框架的,因为表结构不会对开发人员公开。