1 環境準備
開發平臺:
win10 pro+jdk1.8+idea2019.3+oracle 10g(xp虛擬機)+maven3.5.3
搭建環境:
-
新建一個maven工程,項目類型直接選擇JavaSE。
-
編寫pom文件,填寫下面的座標。
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc14</artifactId> <version>10.2.0.1.0</version> </dependency> </dependencies>
注意:ojdbc14如果無法直接識別和下載,需要將ojdbc14的jar包安裝到本地倉庫。
步驟如下:2.1 將下載的ojdbc14.jar解壓
2.2 在解壓後的文件夾
\ojdbc14\META-INF
中找到MANIFEST.MF
文件,用文本編輯器打開,並記住圖中的版本號。2.3 在ojdbc所在的jar包目錄下打開命令行,並運行以下命令(注意,版本需要修改爲上一步得到的版本號):
mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc14 -Dversion=10.2.0.1.0 -Dpackaging=jar -Dfile=ojdbc14.jar
控制檯出現
BUILD SUCCESS
就成功安裝jar包了!
2 環境測試
新建測試類,並編寫方法:
/**
* 測試連接數據庫,查詢數據
* @throws Exception
*/
@Test
public void javaCallOracle() throws Exception {
//註冊數據庫驅動
Class.forName("oracle.jdbc.driver.OracleDriver");
//獲取連接
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.254.10:1521:orcl", "cncs", "cncs");
//獲取預處理對象
PreparedStatement pstm = conn.prepareStatement("select * from emp where empno = ?");
//給參數賦值
pstm.setInt(1, 7788);
//執行數據庫查詢操作,並獲取結果集
ResultSet resultSet = pstm.executeQuery();
//遍歷結果
while(resultSet.next()){
System.out.println(resultSet.getString("ename"));
}
//釋放資源
resultSet.close();
pstm.close();
conn.close();
}
測試成功,進入下一步,如果測試不對,先檢查有沒有導入ojdbc14的座標。
3 調用存儲過程
打開JDK-API,搜索CallableStatement
,找到轉義語法的格式:
//存儲函數書寫格式
{?= call <procedure-name>[(<arg1>,<arg2>, ...)]}
//存儲過程書寫格式
{call <procedure-name>[(<arg1>,<arg2>, ...)]}
編寫調用存儲過程的函數:
/**
* 測試調用存儲過程
* {call <procedure-name>[(<arg1>,<arg2>, ...)]}
*/
@Test
public void javaCallProceduce() throws Exception{
//註冊數據庫驅動
Class.forName("oracle.jdbc.driver.OracleDriver");
//獲取連接
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.254.10:1521:orcl", "cncs", "cncs");
//獲取預處理對象
CallableStatement cs = conn.prepareCall("{call p_yearsal(?,?)}");
//給參數賦值
cs.setInt(1, 7788);
cs.registerOutParameter(2, OracleTypes.NUMBER);
//執行存儲過程
cs.execute();
System.out.println(cs.getObject(2));
}
4 調用存儲函數
編寫調用存儲函數的函數:
/**
* 測試調用存儲函數
* {?= call <procedure-name>[(<arg1>,<arg2>, ...)]}
*
*/
@Test
public void javaCallFunction() throws Exception{
//註冊數據庫驅動
Class.forName("oracle.jdbc.driver.OracleDriver");
//獲取連接
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.254.10:1521:orcl", "cncs", "cncs");
//獲取預處理對象
CallableStatement cs = conn.prepareCall("{? = call f_yearsal(?)}");
//給參數賦值
cs.setInt(2, 7499);
cs.registerOutParameter(1, OracleTypes.NUMBER);
//執行存儲過程
cs.execute();
System.out.println(cs.getObject(1));
}