快速业务通道

Spring源代码解析(三):Spring JDBC - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-18
psc, new PreparedStatementCallback() {      public Object doInPreparedStatement(PreparedStatement ps) throws SQLException {        //准备查询结果集        ResultSet rs = null;        try {        //这里配置SQL参数          if (pss != null) {            pss.setValues(ps);          }       //这里执行的SQL查询          rs = ps.executeQuery();          ResultSet rsToUse = rs;          if (nativeJdbcExtractor != null) {            rsToUse = nativeJdbcExtractor.getNativeResultSet (rs);          }      //返回需要的记录集合          return rse.extractData(rsToUse);        }        finally {      //最后关闭查询的纪录集,对数据库连接的释放在execute()中释放,就像我 们在上面分析的看到那样。          JdbcUtils.closeResultSet(rs);          if (pss instanceof ParameterDisposer) {            ((ParameterDisposer) pss).cleanupParameters();          }        }      }    }); }

辅助类DataSourceUtils来用来对数据库连接进行管理的主要工具,比如打开和关闭数 据库连接等基本操作:

代码

public static Connection doGetConnection(DataSource dataSource) throws SQLException {   //把对数据库连接放到事务管理里面进行管理    ConnectionHolder conHolder = (ConnectionHolder) TransactionSynchronizationManager.getResource(dataSource);    if (conHolder != null && (conHolder.hasConnection() || conHolder.isSynchronizedWithTransaction())) {      conHolder.requested();      if (!conHolder.hasConnection()) {        logger.debug("Fetching resumed JDBC Connection from DataSource");        conHolder.setConnection(dataSource.getConnection());      }      return conHolder.getConnection();    }    // 这里得到需要的数据库连接,在配置文件中定义好的。    logger.debug("Fetching JDBC Connection from DataSource");    Connection con = dataSource.getConnection();    if (TransactionSynchronizationManager.isSynchronizationActive()) {      logger.debug("Registering transaction synchronization for JDBC Connection");      // Use same Connection for further JDBC actions within the transaction.      // Thread-bound object will get removed by synchronization at transaction completion.      ConnectionHolder holderToUse = conHolder;      if (holderToUse == null) {        holderToUse = new ConnectionHolder(con);      }      else {        holderToUse.setConnection(con);      }      holderToUse.requested();      TransactionSynchronizationManager.registerSynchronization(          new ConnectionSynchronization(holderToUse, dataSource));      holderToUse.setSynchronizedWithTransaction(true);      if (holderToUse != conHolder) {        TransactionSynchronizationManager.bindResource(dataSource, holderToUse);      }    }    return con; }

Spring源代码解析(三):Spring JDBC(3)

时间:2011-03-2

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号