一.環境準備
- 1.oracle11g使用的是ojdbc14版本的jar包
- 2.oracle10g使用的是ojdbc6的jar包
二.java調用存儲過程之環境測試和調用存儲過程和存儲函數
@Test
public void testOracleDriver() throws Exception {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@120.79.49.227:1521:orcl11g","aaabbb","aaabbb");
PreparedStatement statement = conn.prepareStatement("select * from emp where empno = ?");
statement.setObject(1,7788);
ResultSet resultSet = statement.executeQuery();
while (resultSet.next()){
System.out.println(resultSet.getString("ename"));
}
resultSet.close();
statement.close();
conn.close();
}
//存儲過程
@Test
public void testOracleProcedures() throws Exception {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@120.79.49.227:1521:orcl11g","aaabbb","aaabbb");
//{call <procedure-name>[(<arg1>,<arg2>, ...)]} 存儲過程的寫法
CallableStatement callableStatement = conn.prepareCall("{call p_yearsal(?,?)}");
// 參數
callableStatement.setObject(1,7788);
//類型參數需要使用這個方法
callableStatement.registerOutParameter(2, OracleTypes.NUMBER);
callableStatement.execute();
//因爲存儲過程是沒有返回值的,參數的賦值是直接在存儲過程中賦值的。
System.out.println(callableStatement.getObject(2));
callableStatement.close();
conn.close();
}
//存儲函數
@Test
public void testOracleFunction() throws Exception {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@120.79.49.227:1521:orcl11g","aaabbb","aaabbb");
//{call <procedure-name>[(<arg1>,<arg2>, ...)]} 存儲過程的寫法
CallableStatement callableStatement = conn.prepareCall("{?=call f_yearsal(?)}");
// 此處定義形參參數
callableStatement.setObject(2,7788);
//此處定義返回值參數
callableStatement.registerOutParameter(1, OracleTypes.NUMBER);
callableStatement.execute();
//返回值爲第一個,所以獲取的值爲第一個
System.out.println(callableStatement.getObject(1));
callableStatement.close();
conn.close();
}