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));
}