代码连接MySQL数据库出现通信链路故障问题求助
问题核心:用错了JDBC驱动和连接字符串!
嘿,兄弟,我一眼就瞅出问题所在了——你明明要连的是Oracle数据库,但代码里全是MySQL的配置,这能连上才怪呢!
咱们先理清楚矛盾点:
- 你说用Oracle SQL Developer能连,数据库是XEPDB1(Oracle的可插拔数据库),端口1521(Oracle默认端口),这些都是Oracle的特征
- 但你的代码里用的是
jdbc:mysql://的连接前缀,加载的是com.mysql.cj.jdbc.Driver驱动,完全是MySQL那套配置,和Oracle不兼容
修正步骤来啦:
1. 替换JDBC驱动
你需要用Oracle官方的JDBC驱动,而不是MySQL的:
- 如果用Maven管理依赖,添加Oracle的ojdbc11(对应你的JDK17版本):
<dependency> <groupId>com.oracle.database.jdbc</groupId> <artifactId>ojdbc11</artifactId> <version>21.13.0.0</version> </dependency> - 手动引入的话,下载ojdbc11.jar添加到项目的依赖库中
2. 修正连接字符串和驱动类
Oracle的JDBC连接格式和MySQL完全不同,针对你的XEPDB1可插拔数据库,正确的配置是:
- 驱动类:
oracle.jdbc.OracleDriver(新版本推荐用这个,旧版的oracle.jdbc.driver.OracleDriver也能凑合用) - 连接字符串:
jdbc:oracle:thin:@//192.168.56.103:1521/XEPDB1
3. 修改你的代码
把原来的MySQL相关配置全部替换掉,修改后的代码片段如下:
public class DatabaseManager { private static DatabaseManager instance = new DatabaseManager(); private static final String DOMAIN_STRING = "192.168.56.103:1521"; private static final String DB_NAME = "XEPDB1"; private static final String USER_NAME = "hr"; private static final String PASSWORD = "hr"; // 修正Oracle连接字符串 private static final String CONNECTION_STRING = "jdbc:oracle:thin:@//" + DOMAIN_STRING + "/" + DB_NAME; private Connection connection; private DatabaseManager(){ super(); try { init(); } catch (Exception e) { System.out.println("Failed to init DatabaseManager: "+e); } } public static DatabaseManager getInstance() { return instance; } private void init() throws ClassNotFoundException, SQLException { // 加载Oracle驱动 Class.forName("oracle.jdbc.OracleDriver"); System.out.println("JDBC driver loaded successfully!"); System.out.println("CONNECTION_STRING: "+CONNECTION_STRING); // 把用户名密码单独传入,比拼在URL里更清晰安全 connection = DriverManager.getConnection(CONNECTION_STRING, USER_NAME, PASSWORD); System.out.println("Connected to database "+DB_NAME); } }
额外小提醒:
- 因为你用Oracle SQL Developer能正常连接,说明数据库监听是正常的,这点不用纠结
- JDBC4.0之后其实可以不用手动调用
Class.forName()加载驱动,驱动会自动注册到DriverManager里,不过保留这段代码也没什么问题 - 确保你的ojdbc版本和JDK版本匹配(JDK17对应ojdbc11),版本不兼容也可能出奇怪的问题
内容的提问来源于stack exchange,提问作者Alexey Kozlov
相关产品推荐
相关产品推荐

