记录一次开发中从java调用oracle中的程序包
编写JDBC连接工具类:
import java.sql.*;
/**
* @Title JDBC工具类demo
* @Desc create by heavent 2018/6/28
**/
public class JDBCUtil {
private static String url = "jdbc:oracle:thin:@//数据库ip:端口号/数据库";
private static String username = "用户名";
private static String password = "用户密码";
//private static String driver = "oracle.jdbc.OracleDriver";
private static String driver = "oracle.jdbc.driver.OracleDriver";
//注册驱动
static {
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
throw new ExceptionInInitializerError(e);
}
}
//获取数据连接
public static Connection getConnection(){
try {
return DriverManager.getConnection(url, username, password);
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
//释放数据库资源
public static void release(Connection conn, Statement statement, ResultSet resultSet){
if(resultSet != null){
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
resultSet = null;
}
}
if(statement != null){
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
statement = null;
}
}
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
conn = null;
}
}
}
}
调用程序包存储过程(数据集合返回的处理)案例:
public static void main(String[] args){
/**
* 调用程序包
* create or replace package p_index_statistic
* as
* function get_pic return varchar;
* function set_pic(pic in varchar) return varchar;
* function get_pic_arr return varchar;
* function set_pic_arr(pic_arr in varchar) return varchar;
* function get_bg_arr return varchar;
* function set_bg_arr(bg_arr in varchar) return varchar;
*
* type tempcursor is ref cursor;
* procedure get_index_statistic(pic in varchar, pic_arr in varchar, bg_arr in varchar, setResult out tempcursor);
*
* end p_index_statistic;
*/
String sql = "{call p_index_statistic.get_index_statistic(?, ?, ?, ?)}";
Connection conn = null;
CallableStatement call = null;
ResultSet resultSet = null;
try{
conn = JDBCUtil.getConnection();
call = conn.prepareCall(sql);
//对于in参数 赋值 数字下标对应string sql中?的位置,从1开始
call.setString(1,"'heavent'");
call.setString(2,"'heavent','tom','james'");
call.setString(3,"'财务部','营销部'");
//对于out参数 声明游标OracleTypes.CURSOR
call.registerOutParameter(4, OracleTypes.CURSOR);
//执行调用
call.execute();
//取出结果集
resultSet = ((OracleCallableStatement) call).getCursor(4);
int num = 0;
while(resultSet.next()){
num++;
System.out.println(resultSet.getString("pic"));
System.out.println(resultSet.getString("companiesNum"));
System.out.println(resultSet.getString("tradingNum"));
System.out.println(resultSet.getString("valueAlertNum"));
System.out.println(resultSet.getString("recordNum"));
System.out.println(resultSet.getString("dividendNum"));
}
//System.out.println(num);
} catch (Exception e) {
e.printStackTrace();
JDBCUtil.release(conn, call, resultSet);
}
}
调用程序包存储函数案例:
public static void main(String[] args){
/**
* 调用程序包中存储函数
* create or replace package p_company_statistic
* as
* function get_iqid_data(pic_arr in varchar, bg_arr in varchar) return varchar;
* end p_company_statistic;
*/
String sql = "{?=call p_company_statistic.get_iqid_data(?, ?)}";
Connection conn = null;
CallableStatement call = null;
ResultSet resultSet = null;
try{
conn = JDBCUtil.getConnection();
call = conn.prepareCall(sql);
//对于返回参数 类型 数字下标对应string sql中?的位置,从1开始
call.registerOutParameter(1, OracleTypes.VARCHAR);
//对于in参数 赋值
call.setString(2,"'MAYRAO'");
call.setString(3,"'IEG'");
//执行
call.execute();
System.out.println(call.getString(1));
} catch (Exception e) {
e.printStackTrace();
JDBCUtil.release(conn, call, resultSet);
}
}