Java 测试 Oracle 连接
以下是一个完整的 Java 示例,用于测试与 Oracle 数据库的连接,这个示例使用 JDBC 驱动程序来建立连接并执行简单的查询。

准备工作
-
下载 Oracle JDBC 驱动:
- 从 Oracle 官网下载 JDBC 驱动(ojdbc.jar 或 ojdbc8.jar 等)
- 将驱动 JAR 文件添加到项目的类路径中
-
确保数据库连接信息:
- 数据库 URL
- 用户名
- 密码
示例代码
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class OracleConnectionTest {
// 数据库连接信息
private static final String DB_URL = "jdbc:oracle:thin:@//hostname:port/service_name";
private static final String USER = "username";
private static final String PASS = "password";
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
// 1. 注册 JDBC 驱动 (对于较新的 JDBC 驱动,这步可以省略)
Class.forName("oracle.jdbc.driver.OracleDriver");
// 2. 建立连接
System.out.println("正在连接到 Oracle 数据库...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
// 3. 创建语句
stmt = conn.createStatement();
// 4. 执行查询
String sql = "SELECT 'Hello Oracle Connection' as message FROM DUAL";
rs = stmt.executeQuery(sql);
// 5. 处理结果集
while (rs.next()) {
// 通过列名获取数据
String message = rs.getString("message");
System.out.println("查询结果: " + message);
}
System.out.println("成功连接到 Oracle 数据库!");
} catch (ClassNotFoundException e) {
System.err.println("找不到 Oracle JDBC 驱动类");
e.printStackTrace();
} catch (SQLException e) {
System.err.println("数据库连接失败或查询出错");
e.printStackTrace();
} finally {
// 6. 关闭资源
try {
if (rs != null) rs.close();
if (stmt != null) stmt.close();
if (conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
不同版本的 Oracle URL 格式
根据你的 Oracle 版本和连接方式,URL 可能有所不同:
-
Thin 驱动 (最常用):
(图片来源网络,侵删)jdbc:oracle:thin:@//hostname:port/service_namejdbc:oracle:thin:@hostname:port:SID
-
OCI 驱动:
jdbc:oracle:oci8:@hostname:port/service_name
-
SID vs Service Name:
- SID 是旧版本的标识符
- Service Name 是新版本的标识符(推荐使用)
使用连接池(推荐)
在生产环境中,建议使用连接池而不是直接创建连接,以下是使用 HikariCP 连接池的示例:
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
public class OracleConnectionPoolTest {
public static void main(String[] args) {
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:oracle:thin:@//hostname:port/service_name");
config.setUsername("username");
config.setPassword("password");
config.setDriverClassName("oracle.jdbc.driver.OracleDriver");
// 连接池配置
config.setMaximumPoolSize(10);
config.setMinimumIdle(5);
config.setConnectionTimeout(30000);
config.setIdleTimeout(600000);
config.setMaxLifetime(1800000);
try (HikariDataSource ds = new HikariDataSource(config);
Connection conn = ds.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT 'Hello from Connection Pool' as message FROM DUAL")) {
while (rs.next()) {
System.out.println("查询结果: " + rs.getString("message"));
}
System.out.println("成功使用连接池连接到 Oracle 数据库!");
} catch (Exception e) {
e.printStackTrace();
}
}
}
常见问题解决
-
ClassNotFoundException:
(图片来源网络,侵删)- 确保 Oracle JDBC 驱动 JAR 文件在类路径中
- 检查驱动类名是否正确
-
SQLException: IO Exception: The Network Adapter could not establish the connection:
- 检查数据库主机名和端口是否正确
- 确保数据库服务正在运行
- 检查防火墙设置
-
ORA-01017: invalid username/password; logon denied:
- 检查用户名和密码是否正确
- 确认用户是否有连接权限
-
ORA-12514: TNS:listener does not currently know of service requested in connect descriptor:
- 检查服务名称(SID)是否正确
- 确认监听器是否正在运行
希望这个示例能帮助你成功测试 Oracle 数据库连接!
