Java与Oracle数据库的连接可以使用JDBC(Java DataBase Connectivity)来实现,本文将从以下几个方面对Java连接Oracle进行详细的阐述:
一、JDBC简介
JDBC是一种独立于数据库管理系统(DBMS)的API,它提供了一种标准的方法来访问不同类型的数据库。 Java程序通过JDBC来连接关系型数据库,从而可以执行SQL语句、访问和修改数据等操作。
目前JDBC规范包括两个部分:JDBC API和JDBC驱动程序。JDBC API是Java程序访问数据库的标准接口,而JDBC驱动程序则是提供JDBC API标准实现的库。
二、Oracle JDBC驱动
Oracle官方提供了一个JDBC驱动程序Oracle JDBC driver,用于连接Oracle数据库,可以从Oracle官网下载。下载时需要选择对应的JDBC版本、操作系统和Java版本。通常,我们使用最新版本的JDBC驱动程序。
三、连接Oracle数据库
Java程序连接Oracle数据库需要使用JDBC驱动程序,并且需要按照以下步骤进行:
1. 加载JDBC驱动程序
Java程序中需要使用JDBC驱动程序,因此需要在程序中加载驱动程序。加载驱动程序的方式有两种,一种是使用Class.forName()方法,另一种是使用DriverManager.registerDriver()方法。
// 第一种方式,使用Class.forName()方法加载驱动程序 Class.forName("oracle.jdbc.driver.OracleDriver"); // 第二种方式,使用DriverManager.registerDriver()方法加载驱动程序 DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
2. 连接数据库
连接Oracle数据库需要指定数据库的URL、用户名和密码。其中,URL由协议、主机、端口和数据库名组成。例如:
String url = "jdbc:oracle:thin:@localhost:1521:orcl"; String username = "scott"; String password = "tiger"; Connection conn = DriverManager.getConnection(url, username, password);
四、执行SQL语句
连接Oracle数据库后,Java程序可以执行SQL语句,包括查询、插入、更新和删除等操作。在Java中执行SQL语句需要使用Statement或PreparedStatement对象。其中,PreparedStatement对象可以预编译SQL语句,提高执行效率。
1. 查询数据
查询数据需要创建一个Statement或PreparedStatement对象,然后使用ResultSet获取查询结果。
// 创建PreparedStatement对象,预编译SQL语句 String sql = "SELECT * FROM emp WHERE deptno = ?"; PreparedStatement stmt = conn.prepareStatement(sql); stmt.setInt(1, 10); // 执行查询操作,获取ResultSet ResultSet rs = stmt.executeQuery(); while(rs.next()) { // 处理查询结果 int empno = rs.getInt("empno"); String ename = rs.getString("ename"); double sal = rs.getDouble("sal"); // ... }
2. 插入、更新和删除数据
插入、更新和删除数据同样需要创建PreparedStatement对象,并指定相应的SQL语句。执行结果可以使用executeUpdate()方法获取。
// 创建PreparedStatement对象,预编译SQL语句 String sql = "INSERT INTO emp VALUES (?, ?, ?, ?, ?, ?, ?, ?)"; PreparedStatement stmt = conn.prepareStatement(sql); stmt.setInt(1, 8888); stmt.setString(2, "test"); stmt.setString(3, "CLERK"); stmt.setInt(4, 7902); stmt.setDate(5, new Date(System.currentTimeMillis())); stmt.setDouble(6, 1500.00); stmt.setDouble(7, null); stmt.setInt(8, 10); // 执行插入操作,获取更新结果 int result = stmt.executeUpdate();
五、关闭连接
Java程序连接Oracle数据库后,需要在不使用时关闭数据库连接,释放资源。关闭数据库连接可以使用Connection的close()方法,例如:
// 关闭数据库连接 conn.close();
六、完整代码示例
下面是一个完整的Java连接Oracle数据库的代码示例:
import java.sql.*; public class OracleJdbcExample { public static void main(String[] args) { String url = "jdbc:oracle:thin:@localhost:1521:orcl"; String username = "scott"; String password = "tiger"; try { // 加载Oracle JDBC驱动程序 Class.forName("oracle.jdbc.driver.OracleDriver"); // 连接Oracle数据库 Connection conn = DriverManager.getConnection(url, username, password); // 查询数据 String sql = "SELECT * FROM emp WHERE deptno = ?"; PreparedStatement stmt = conn.prepareStatement(sql); stmt.setInt(1, 10); ResultSet rs = stmt.executeQuery(); while(rs.next()) { int empno = rs.getInt("empno"); String ename = rs.getString("ename"); double sal = rs.getDouble("sal"); System.out.println(empno + "\t" + ename + "\t" + sal); } rs.close(); stmt.close(); // 插入数据 sql = "INSERT INTO emp VALUES (?, ?, ?, ?, ?, ?, ?, ?)"; stmt = conn.prepareStatement(sql); stmt.setInt(1, 8888); stmt.setString(2, "test"); stmt.setString(3, "CLERK"); stmt.setInt(4, 7902); stmt.setDate(5, new Date(System.currentTimeMillis())); stmt.setDouble(6, 1500.00); stmt.setDouble(7, 0); stmt.setInt(8, 10); int result = stmt.executeUpdate(); System.out.println("Insert result: " + result); stmt.close(); // 关闭数据库连接 conn.close(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } }