欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java连接Oracle数据库

程序员文章站 2022-05-01 16:49:13
java连接Oracle数据库和java连接mysql数据库大同小异,下面是java连接oracle的一段测试代码。使用的数据表是orcle数据库中scott下的表复制到自己创建的用户下。并且创建了一些存储过程和存储函数create or replace procedure proc_countyearsal(eno in number,esal out number)asbeginselect sal*12+nvl(comm,0) into esal from emp where empno...

java连接Oracle数据库和java连接mysql数据库大同小异,下面是java连接oracle的一段测试代码。
使用的数据表是orcle数据库中scott下的表复制到自己创建的用户下。
并且创建了一些存储过程和存储函数

create or replace procedure proc_countyearsal(eno in number,esal out number)
as
begin
	select sal*12+nvl(comm,0) into esal from emp where empno=eno;
end;
create or replace function empincome(eno in emp.empno%type) return number is
	psal emp.sal%type;
	pcomm emp.comm%type;
begin
	select t.sal into psal from emp t where t.empno = eno;
	return psal*10+nvl(pcomm,0);
end;

编写测试代码,测试数据库的连接,以及测试存储过程和存储过程。

package com.liang;

import oracle.jdbc.OracleTypes;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.sql.*;

public class testJdbc {


    private Statement statement;
    private Connection connection;

    /**
     * 测试方法执行前执行
     */
    @Before
    public void init(){
        String driver = "oracle.jdbc.OracleDriver";    //驱动标识符
        String url = "jdbc:oracle:thin:@localhost:1521:orcl"; //链接字符串
        String username = "liang";
        String password = "xxxxx";
        try {
            Class.forName(driver);//加载驱动
            connection = DriverManager.getConnection(url, username, password);//获取连接对象
            statement = connection.createStatement();//创建Statement对象
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    /**
     * 测试Oracle数据库连接
     */
    @Test
    public void jdbcTest(){
        try {
            statement = connection.createStatement();
            ResultSet resultSet = statement.executeQuery("select * from emp");//执行SQL语句
            //遍历查询结果
            while (resultSet.next()){
                System.out.println(resultSet.getObject(1)+" : "+resultSet.getObject(2));
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    /**
     * 调用存储过程
     */
    @Test
    public void testProcedure(){
        try {
            //创建一个调用数据库存储过程的 CallableStatement对象
            CallableStatement callableStatement = connection.prepareCall("{call proc_countyearsal(?,?)}");
            callableStatement.setInt(1,7839);//给 参数位置1 传递int类型的参数
            callableStatement.registerOutParameter(2, OracleTypes.NUMBER);//注册指定的输出参数
            callableStatement.execute();//执行存储过程
            System.out.println(callableStatement.getObject(2));
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    /**
     * 测试存储函数
     */
    @Test
    public void testFunction(){
        try {
            //创建一个调用数据库存储函数的 CallableStatement对象
            CallableStatement callableStatement = connection.prepareCall("{?= call empincome(?)}");
            callableStatement.setInt(2,7369);//给 参数位置2 传递int类型的参数
            callableStatement.registerOutParameter(1, OracleTypes.NUMBER);//注册指定的返回值
            callableStatement.execute();//执行存储函数
            System.out.println(callableStatement.getObject(1));
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    /**
     * 测试方法执行后执行
     */
    @After
    public void destroy(){
        try {
            statement.close();
            connection.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

需要导入的jar包

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
        </dependency>

        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>11.2.0</version>
        </dependency>
    </dependencies>

此处需要注意的问题是:根据orale版本的不同需要的jar包也不同。
常用的两个Oracle数据库版本和需要的jar包

Oracle jar
oracle10g ojdbc14.jar
oracle11g ojdbc6.jar

本文地址:https://blog.csdn.net/Rong_zhe/article/details/107295493