使用Java操作存储过程和存储函数
一:操作Oracle数据库的常用字符串
1 # Properties file with JDBC-related settings.
2 # Applied by PropertyPlaceholderConfigurer from "dataAccessContext-local.xml".
3 # Targeted at system administrators, to avoid touching the context XML files.
4
5 jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
6 jdbc.url=jdbc:oracle:thin:@localhost:1521:orclstu
7 jdbc.username=system
8 jdbc.password=oracle
9 jdbc.readOnly=false
二:本地的Oracle数据库驱动包坐标
1 <!--Oracle的驱动包-->
2 <dependency>
3 <groupId>com.oracle</groupId>
4 <artifactId>ojdbc6</artifactId>
5 <version>11.2.0.4.0-atlassian-hosted</version>
6 </dependency>
三:具体实现
1 package com.dream;
2
3 import oracle.jdbc.OracleTypes;
4 import oracle.jdbc.oracore.OracleType;
5 import org.junit.Test;
6
7 import java.sql.*;
8
9 /**
10 * @author ZhangJun
11 * @date 2020-04-23
12 * @description Oracle测试存储过程和存储函数
13 */
14 public class OracleDemo {
15
16 /**
17 * 测试Oracle的连接
18 */
19 @Test
20 public void javaCallOracle() throws Exception {
21 //1.加载数据库驱动
22 Class.forName("oracle.jdbc.driver.OracleDriver");
23 //2.获取Connection连接
24 Connection connection = DriverManager.getConnection(
25 "jdbc:oracle:thin:@localhost:1521:orclstu",
26 "dream",
27 "dream");
28 //3.得到预编译的Statement对象
29 PreparedStatement statement = connection.prepareStatement("select * from emp where empno=?");
30 //4.给参数赋值
31 statement.setObject(1, 7788);
32 //5.执行数据库查询操作
33 ResultSet resultSet = statement.executeQuery();
34 //6.输出结果
35 while (resultSet.next()) {
36 System.out.println(resultSet.getString("ename"));
37 }
38 //7.关闭连接
39 resultSet.close();
40 statement.close();
41 connection.close();
42 }
43
44 /**
45 * 测试Oracle的存储过程
46 * {?= call <procedure-name>[(<arg1>,<arg2>, ...)]} 调用存储函数使用
47 * {call <procedure-name>[(<arg1>,<arg2>, ...)]} 调用存储过程使用
48 */
49 @Test
50 public void javaCallProcedure() throws Exception {
51 //1.加载数据库驱动
52 Class.forName("oracle.jdbc.driver.OracleDriver");
53 //2.获取Connection连接
54 Connection connection = DriverManager.getConnection(
55 "jdbc:oracle:thin:@localhost:1521:orclstu",
56 "dream",
57 "dream");
58 //3.得到预编译的Statement对象
59 CallableStatement statement = connection.prepareCall("{call p_yearsal(?,?)}");
60 //4.给参数赋值
61 statement.setObject(1, 7788);
62 statement.registerOutParameter(2, OracleTypes.NUMBER);
63 //5.执行数据库查询操作
64 statement.execute();
65 //6.输出结果
66 System.out.println("年薪:"+statement.getObject(2));
67 //7.关闭连接
68 statement.close();
69 connection.close();
70 }
71
72 /**
73 * 测试Oracle的存储函数
74 * {?= call <procedure-name>[(<arg1>,<arg2>, ...)]} 调用存储函数使用
75 * {call <procedure-name>[(<arg1>,<arg2>, ...)]} 调用存储过程使用
76 */
77 @Test
78 public void javaCallFunction() throws Exception {
79 //1.加载数据库驱动
80 Class.forName("oracle.jdbc.driver.OracleDriver");
81 //2.获取Connection连接
82 Connection connection = DriverManager.getConnection(
83 "jdbc:oracle:thin:@localhost:1521:orclstu",
84 "dream",
85 "dream");
86 //3.得到预编译的Statement对象
87 //操作存储过程和存储函数时,必须使用CallableStatement这个对象
88 CallableStatement statement = connection.prepareCall("{?=call f_yearsal(?)}");
89 //4.给参数赋值
90 statement.setObject(2, 7788);
91 //设置out返回对象
92 statement.registerOutParameter(1, OracleTypes.NUMBER);
93 //5.执行数据库查询操作
94 statement.execute();
95 //6.输出结果
96 System.out.println("年薪:"+statement.getObject(1));
97 //7.关闭连接
98 statement.close();
99 connection.close();
100 }
101 }