java使用eclipse连接Oracle12c数据库的方法

打开eclipse,创建一个java项目
(File→New→Java Project)项目名称自定,但jre必须是自己已经安装的,如下图所示:
在这里插入图片描述
创建完项目后,在项目下新建一个lib文件夹,用于放置所需的依赖包
在这里插入图片描述
然后打开自己所装的Oracle12c的目录E:\app\Oracle12c\product\12.2.0\dbhome_1\jdbc\lib,如下图所示:
在这里插入图片描述
将上图lib目录下的ojdbc.jar,版本必须跟创建项目所用的jre版本对应,如我的:将ojdbc8.jar文件复制了放到eclipse中java项目的lib文件夹中:
在这里插入图片描述
选中该文件,右键选择“Build Path”→“add to Build Path”,就会多出一个文件,如图所示:
在这里插入图片描述
在src目录中新建一个包:jdbc.utils,在该包中新建一个java文件:JDBCUtils.java在其中添加如下代码:

package jdbc.utils;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JDBCUtils {

	private static String driver = "oracle.jdbc.OracleDriver";
	private static String url = "jdbc:oracle:thin:@localhost:1521:HYHCJ";//数据库连接名HYHCJ
	private static String user = "c##scott";//用户名
	private static String password = "tiger";//密码
	
	//注册数据库驱动
	static {
		try {
			Class.forName(driver);
		}catch (ClassNotFoundException e) {
			// TODO: handle exception
			throw new ExceptionInInitializerError();
		}
	}
	
	//获取数据库连接
	public static Connection getConnection() {
		try {
			return DriverManager.getConnection(url,user,password);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}
	
	//释放数据库的资源
	public static void release(Connection conn,Statement st,ResultSet rs) {
		if(rs != null) {
			try {
				rs.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}finally {
				rs = null;
			}
		}
		if(st != null) {
			try {
				st.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}finally {
				st = null;
			}
		}
		if(conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}finally {
				conn = null;
			}
		}
	}
}

在该项目中导入依赖包,如下图所示:
在这里插入图片描述
在这里插入图片描述
然后就多出了下图所示的文件:
在这里插入图片描述

测试一下连接情况
在src目录中再新建一个包:jdbc.Oracle,在该包中新建一个java文件:TestProcedure.java,在其中添加如下代码:

package jdbc.oracle;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.SQLException;

import org.junit.Test;

import jdbc.utils.JDBCUtils;
import oracle.jdbc.OracleTypes;

public class TestProcedure {

	@Test
	public void testProcedure() {
		//{call <procedure-name[(<arg1>,<arg2>, ...)]>}
		String sql = "{call queryempinform(?,?,?,?)}";
		Connection conn = null;
		CallableStatement call = null;
		
		try {
			conn = JDBCUtils.getConnection();
			call = conn.prepareCall(sql);
			
			//对in参数,赋值
			call.setInt(1, 7839);
			
			//对out参数,赋值
			call.registerOutParameter(2, OracleTypes.VARCHAR);
			call.registerOutParameter(3, OracleTypes.NUMBER);
			call.registerOutParameter(4, OracleTypes.VARCHAR);
			
			//执行调用
			call.execute();
			
			//取出结果
			String name = call.getString(2);
			double sal = call.getDouble(3);
			String job = call.getString(4);
			System.out.println(name+"\t"+sal+"\t"+job);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			JDBCUtils.release(conn, call, null);
		}
	}
}

运行测试一下:
在这里插入图片描述
测试存储函数:
jdbc.Oracle包中新建一个java文件:TestFunction.java,在其中添加如下代码:

package jdbc.oracle;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.SQLException;

import org.junit.Test;

import jdbc.utils.JDBCUtils;
import oracle.jdbc.OracleTypes;

public class TestFunction {

	@Test
	private void testFunction() {
		// TODO Auto-generated method stub
		//{call <procedure-name[(<arg1>,<arg2>, ...)]>}

		String sql = "{? = call queryempinform(?)}";
		Connection conn = null;
		CallableStatement call = null;
		
		try {
			//得到数据库连接
			conn = JDBCUtils.getConnection();
			//基于连接创建statement
			call = conn.prepareCall(sql);
			
			//对于输出参数,申明
			call.registerOutParameter(1, OracleTypes.NUMBER);
			//对于输入参数,赋值
			call.setInt(2, 7839);
			
			//执行调用
			call.execute();
			//取出年收入的结果
			double income = call.getDouble(1);
			
			System.out.println("该员工的年收入是:"+income);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			JDBCUtils.release(conn, call, null);
		}
	}
}

测试结果:

package jdbc.oracle;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.SQLException;

import org.junit.Test;

import jdbc.utils.JDBCUtils;
import oracle.jdbc.OracleTypes;

public class TestFunction {

	@Test
	private void testFunction() {
		// TODO Auto-generated method stub
		//{call <procedure-name[(<arg1>,<arg2>, ...)]>}

		String sql = "{? = call queryempinform(?)}";
		Connection conn = null;
		CallableStatement call = null;
		
		try {
			//得到数据库连接
			conn = JDBCUtils.getConnection();
			//基于连接创建statement
			call = conn.prepareCall(sql);
			
			//对于输出参数,申明
			call.registerOutParameter(1, OracleTypes.NUMBER);
			//对于输入参数,赋值
			call.setInt(2, 7839);
			
			//执行调用
			call.execute();
			//取出年收入的结果
			double income = call.getDouble(1);
			
			System.out.println("该员工的年收入是:"+income);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			JDBCUtils.release(conn, call, null);
		}
	}
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/hyh17808770899/article/details/106872076
今日推荐