用老方法讲讲JAVA咋跟oracle数据库连起来的那些事儿
- 问答
- 2025-12-24 05:06:59
- 1
整理自网络技术社区分享、早期Java教材数据库章节以及一些程序员的老笔记)
咱就说Java连Oracle这个事儿,说白了,就跟找人办事儿得先打通关系、再递话、最后等回信儿一个道理,在老早以前,JDBC那一套就是干这个的“老方法”,虽然现在框架满天飞,但明白这个底子,心里才踏实。
第一步:牵线搭桥——加载驱动程序
想跟Oracle数据库说上话,首先得有个“翻译官”或者叫“中介”,这就是JDBC驱动程序,Oracle官方提供了个叫ojdbc.jar的包(老版本可能是ojdbc14.jar、ojdbc6.jar之类的,数字跟JDK版本有关),你得先把这个jar文件想办法放进你的项目里,以前的做法就是下载下来,然后把它加到项目的CLASSPATH环境变量或者IDE的构建路径里。
在Java代码里,得显式地告诉程序:“喂,我们要用Oracle的驱动了!” 通常是用这行代码:
Class.forName("oracle.jdbc.driver.OracleDriver");
这行代码的作用就是让JVM去加载Oracle驱动的类,用老程序员的话讲,这叫“砸实了,把驱动先请进来”,不然后面都白搭。(来源:传统Java数据库编程教材核心步骤)
第二步:递名片,建立连接——获取Connection对象
线搭上了,下一步就是正式拜访,需要知道数据库的“地址”和“门牌号”,也就是数据库的URL,Oracle的JDBC URL长得一般是这样:
jdbc:oracle:thin:@主机名:端口号:数据库SID
或者新一点的写法:
jdbc:oracle:thin:@//主机名:端口号/服务名
比方说,数据库在你本机,端口是默认的1521,数据库SID是orcl,那URL就是:
jdbc:oracle:thin:@localhost:1521:orcl
有了地址和驱动,就用DriverManager来“敲门”:
Connection conn = DriverManager.getConnection(url, "用户名", "密码");
这一步要是成功了,你就拿到了一个Connection对象,这就是那条通往数据库的“专用电话线”,这条线很宝贵,用完了得记得挂断(关闭)。(来源:广泛使用的JDBC基础教程)
第三步:说明来意——创建Statement或PreparedStatement
电话接通了,你得告诉数据库你想干啥,是查东西(SELECT)还是改东西(UPDATE、INSERT等),这就需要一个“说话的工具”,最基础的就是Statement:
Statement stmt = conn.createStatement();
但老手们一般更爱用PreparedStatement,为啥呢?因为它像是个“填空题模板”,能防着点“SQL注入”这种使坏的招数,而且效率高点。
PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM users WHERE name = ? AND age > ?");
这里的问号就是占位符,后面再往里填具体值。
第四步:说话和听回音——执行SQL与处理结果
话怎么说出去,就看你具体要干啥了。
-
如果是查询(SELECT): 用
executeQuery()方法,它会返回一个ResultSet对象,可以把它想象成数据库返回的一张“成绩单”或者“清单”。ResultSet rs = pstmt.executeQuery();然后你就得像看表格一样,一行一行地“读”这个结果:while (rs.next()) { // 移到下一行 String name = rs.getString("name"); // 根据列名取数据 int age = rs.getInt("age"); // ... 处理这些数据 }rs.next()就是往下翻一行,翻到底了就返回false。 -
如果是增删改(INSERT, UPDATE, DELETE): 用
executeUpdate()方法,它返回的是一个数字,表示影响了多少行数据,比如删除了3条记录,就返回3。int count = stmt.executeUpdate("DELETE FROM temp_data WHERE expired = 'Y'");
第五步:收拾场面,挂断电话——关闭资源
这一点是老程序员们反复强调的“好习惯”,就跟“出门要关灯”一样重要,你打开的这些对象(ResultSet, Statement, Connection)都是占着数据库资源和内存的,用完了必须得显式地关闭,而且关闭的顺序最好是“后打开的先关”:
if (rs != null) rs.close(); if (stmt != null) stmt.close(); if (conn != null) conn.close();
更稳妥的做法是放在finally代码块里关,确保即使前面出了异常,资源也能被关闭,防止泄露,后来有了try-with-resources语法,这事就省心多了,但那是后话了。
老方法里的那些“坑”和“讲究”
- 异常处理:
Class.forName、getConnection、执行SQL这些步骤都可能出错,必须用try-catch包起来,抓住SQLException异常,不然程序一不小心就崩了。 - 密码明文: 直接把用户名密码写在代码里不安全,后来大家学乖了,都放到配置文件里去了。
- 连接池: 老是开连接、关连接很耗时间,所以后来出现了“连接池”技术,相当于事先建好一堆连接放着,用的时候直接从池子里取,用完了还回去,不用彻底断开,大大提高了效率,但在最原始的老方法里,都是现用现连。
这老方法几步走:加载驱动、建立连接、创建语句对象、执行SQL处理结果、最后务必关闭连接,虽然步骤繁琐,但每一步都透着实实在在的控制感,理解了这套流程,就算后面用上MyBatis、Hibernate这些“高级工具”,也知道它们底层在帮你干什么活儿。(核心思路来源:多位资深开发者的经验总结与教学笔记)

本文由寇乐童于2025-12-24发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:https://haoid.cn/wenda/67351.html
