使用JDBC进行数据访问 - 编程入门网
使用JDBC进行数据访问时间:2011-03-14Spring提供的JDBC抽象框架由core, datasource,object和 support四个不同的包组成。 就和它名字的暗示一样,org.springframework.jdbc.core包里定义了提供核心功能的类。 其中有各种SQLExceptionTranslator和DataFieldMaxValueIncrementer的实现以及一个用于JdbcTemplate的DAO基础类。 org.springframework.jdbc.datasource包里有一个用以简化数据源访问的工具类, 以及各种数据源的简单实现,以被用来在J2EE容器之外不经修改地测试JDBC代码。 这个工具类提供了从JNDI获得连接和可能用到的关闭连接的静态方法。 它支持绑定线程的连接,比如被用于DataSourceTransactionManager。 接着,org.springframework.jdbc.object包里是把关系数据库的查询, 更新和存储过程封装为线程安全并可重用对象的类。 这中方式模拟了JDO,尽管查询返回的对象理所当然的“脱离”了数据库连接。 这个JDBC的高层抽象依赖于org.springframework.jdbc.core包中所实现的底层抽象。 最后在org.springframework.jdbc.support包中你可以找到 SQLException的转换功能和一些工具类。 在JDBC调用中被抛出的异常会被转换成在定义org.springframework.dao包中的异常。 这意味着使用Spring JDBC抽象层的代码不需要实现JDBC或者RDBMS特定的错误处理。 所有的转换后的异常都是unchecked,它允许你捕捉那些你可以恢复的异常, 并将其余的异常传递给调用者。 JdbcTemplate 这是在JDBC核心包中最重要的类。它简化了JDBC的使用, 因为它处理了资源的建立和释放。 它帮助你避免一些常见的错误,比如忘了总要关闭连接。它运行核心的JDBC工作流, 如Statement的建立和执行,而只需要应用程序代码提供SQL和提取结果。这个类执行SQL查询, 更新或者调用存储过程,模拟结果集的迭代以及提取返回参数值。它还捕捉JDBC的异常并将它们转换成 org.springframework.dao包中定义的通用的,能够提供更多信息的异常体系。 使用这个类的代码只需要根据明确定义的一组契约来实现回调接口。 PreparedStatementCreator回调接口创建一个由该类提供的连接所建立的PreparedStatement, 并提供SQL和任何必要的参数。CallableStatementCreateor实现同样的处理, 只是它创建了CallableStatement。RowCallbackHandler接口从数据集的每一行中提取值。 这个类可以直接通过数据源的引用实例化,然后在服务中使用, 也可以在ApplicationContext中产生并作为bean的引用给服务使用。 注意:数据源应当总是作为一个bean在ApplicationContext中配置, 第一种情况它被直接传递给服务,第二种情况给JdbcTemplate。 因为这个类把回调接口和SQLExceptionTranslator接口作为参数表示,所以没有必要为它定义子类。 这个类执行的所有SQL都会被记入日志。 数据源 为了从数据库获得数据,我们需要得到数据库的连接。 Spring采用的方法是通过一个数据源。 数据源是JDBC规范的一部分,它可以被认为是一个通用的连接工厂。 它允许容器或者框架将在应用程序代码中隐藏连接池和事务的管理操作。 开发者将不需要知道连接数据库的任何细节,那是设置数据源的管理员的责任。 虽然你很可能在开发或者测试的时候需要兼任两种角色,但是你并不需要知道实际产品中的数据源是如何配置的。 使用Spring的JDBC层,你可以从JNDI得到一个数据源,也可以通过使用Spring发行版提供的实现自己配置它。 后者对于脱离Web容器的单元测试是十分便利的。 我们将在本节中使用DriverManagerDataSource实现,当然以后还会提到其他的一些的实现。 DriverManagerDataSource和传统的方式一样获取JDBC连接。 为了让DriverManager可以装载驱动类,你必须指定JDBC驱动完整的类名。 然 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |