分享
 
 
 

在Oracle JDBC访问中加入Spring特性

王朝oracle·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

字符编码转换:$utf8 = iconv('gb2312','utf-8',$str);

获得字符的编码形式:mb_detect_encoding;

JDBC 是一个常用于访问关系数据库的标准数据访问协议。JDBC 的一个显著优势是其标准化的 API,为基于 Java 的数据访问应用程序的可移植性奠定了基础。JDBC 是标准 Java (J2SE) 和企业 Java (J2EE) 中一个不可或缺的部分,在 Java 早期阶段就已推出。

JDBC 有许多优势,使得它能够在许多 J2SE 和 J2EE 应用程序中发挥重要作用。但它也有一些不足之处,使得我们不能称心如意的使用它们。这些麻烦(有时候让人厌恶)的 JDBC 特性催生出了许多公开的 JDBC 抽象框架(例如 SQLExecutor 和 Apache Jakarta Commons DBUtil)以及更多得多的自主开发的 JDBC 应用程序框架。Spring 框架的 JDBC 抽象就是一个公开的 JDBC 抽象框架。

Spring 框架是一个在 Apache 许可下发布的 Java/J2EE 应用程序框架,它支持 J2EE 应用程序中的多个层次。Spring 框架的一个突出特性是支持更易于维护和更强健的 JDBC 数据访问。在本文中,您将了解到 Spring 框架 — 它可以和 Oracle TopLink 对象/关系映射工具结合使用 — 如何大大减少与编写 JDBC 代码相关的烦琐工作和风险。使用 Spring 框架,开发人员编写的 Oracle 数据库访问 JDBC 代码可以更为简洁、更不易出错以及更加灵活。

正确关闭数据库资源

JDBC 代码中的一个常见错误是没有正确关闭连接。这将导致数据库资源的不合理分配。类似地,关闭结果集和语句也是有用并通常推荐的操作。为了确保即使在异常的运行条件下也能正确执行这些关闭操作,一般将采用代码清单 1 中 finally 子句中的代码。

代码清单 17 演示了本文中第一次在基于 Spring 的代码中使用 PreparedStatement,并显示了对 SQLException 的另一种引用。正如代码清单 16 的情况一样,SQLException 主要用于引用 Spring 框架的 JdbcTemplate 类,后者将处理它并将任何异常作为非强制 Spring 异常提供。

代码清单 16 和 17 演示了 Spring 的 RowCallbackHandler 和 PreparedStatementSetter 回调接口的用法。在这些代码清单中使用匿名内部类实现了这些接口。虽然与前面的代码清单中显示的 JdbcTemplate 的更简单的用法相比,开发人员编写的内部类必须知道关于 ResultSet 和 PreparedStatement 以及它们的各个 API 的更多信息,但您仍然无需关心 SQLException 的处理;JdbcTemplate 将执行异常处理。

前面的基于 Spring 的代码清单(例如代码清单 3 和 6 中使用的 JdbcTemplate)甚至没有提到 ResultSet、Statement、PreparedStatement 或 SQLException。这些高度抽象的方法对于不想关心 JDBC 的具体用法的开发人员非凡有用。不过,这些极其方便的方法没有代码清单 16 和 17 所演示的内部类方法灵活。代码清单 16 和 17 中显示的更灵活的方法可以在需要时使用(只需稍微了解基本的 JDBC API)。在所有情况下,异常处理都由 Spring 异常层次结构来一致地执行,您不需要关心 SQLException。

其他好处

代码清单 1

try

{// JDBC Connection/Statement/Result Set}

catch (SQLException sqlEx){

// Handle the exception}finally

{try{

// Closing

connection *should*

close statement and result setif (stmt != null) stmt.close();

if (conn != null) conn.close();

}

catch

(SQLException sqlEx)

{System.err.println("SQLException NOT handled");

}

}

finally 子句通常被用来确保关闭数据库连接和语句。但即使当开发人员的确用这种方法确保成功关闭连接,代码也是冗长、膨胀和重复的。Spring 框架对连接处理和相关资源治理进行了抽象,开发人员不用直接处理上述事项,从而实现更一致的资源关闭并编写更易于理解的代码。

第一个 Spring 代码示例

代码清单 2 中的 JDBC 代码可以用来查询(大家都熟悉)的 scott/tiger 模式中的员工的酬金。正如之前所讨论的那样,在本示例中除了实际查询数据库的 SQL 代码之外,还必需要有大量的“例行”代码。

代码清单 2

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有