C3P0在util包里C3P0ConnectionHelper类里代码实现

import java.sql.Connection;
import java.sql.SQLException;


import javax.sql.DataSource;


import com.mchange.v2.c3p0.ComboPooledDataSource;


public class C3POConnectionHelper {

  private static DataSource ds;
  private   static Connection  con =null;
 
  //在线程中创建Connection对象的副本
  private static ThreadLocal<Connection> t = new ThreadLocal<Connection>();
  
 static
 {
 ds = new ComboPooledDataSource();//会自动从src目录下找c3p0配置
 }
  
/**
* 获取连接对象
* @return
* @throws SQLException
*/
public static Connection getConnection() throws SQLException {
con = t.get();//得到一个线程变量的副本
if(con ==null){
con = ds.getConnection();
t.set(con);//创建一个线程变量的副本
}
return con;
}


/**
* 关闭连接对象的方法
* @throws SQLException
*/
public static void closeConnection() throws SQLException {
con = t.get();
if(con!=null){
con.close();
t.remove();
}

}
/**
* 对当前连接开启事务的方法(对数据进行增,删,改操作必须通过事务提交才会有效)
* @throws SQLException
*/
public static void startTransaction() throws SQLException{
con=t.get();
if(con==null){
con=ds.getConnection();
t.set(con);
}
con.setAutoCommit(false);//开启连接
}
/**
* 对当前连接对象的事务提交
* @throws SQLException
*/
public static void commitTransaction() throws SQLException{
con=t.get();
if(con==null){
con=ds.getConnection();
t.set(con);
}
con.commit();//事务提交
}




  
}
注意,以下使用数据库为sql2000,驱动jtds1.2.2 一、调用存储过程(无结果集返回) Connection connection = ConnectionHelper.getConnection(); CallableStatement callableStatement = connection.prepareCall("{ call procedureName(?,?) }"); callableStatement.setString(1, "xxxxxxxx"); callableStatement.setString(2, "xxxxxxxx"); callableStatement.execute(); //获得sql的消息并输出,这个估计很多人都需要 SQLWarning sqlWarning = callableStatement.getWarnings(); while (sqlWarning != null) { System.out.println("sqlWarning.getErrorCode() = " + sqlWarning.getErrorCode()); System.out.println("sqlWarning.getSQLState() = " + sqlWarning.getSQLState()); System.out.println("sqlWarning.getMessage() = " + sqlWarning.getMessage()); sqlWarning = sqlWarning.getNextWarning(); } //close ConnectionHelper.closeConnection(callableStatement, connection); 二、调用存储过程,返回sql型数据(非记录集) Connection connection = ConnectionHelper.getConnection(); CallableStatement callableStatement = connection.prepareCall("{ call procedureName(?,?,?) }"); callableStatement.setString(1, "xxxxxxxx"); callableStatement.setString(2, "xxxxxxxx"); //重点是这句1 callableStatement.registerOutParameter(3, Types.INTEGER); callableStatement.execute(); //取返回结果,重点是这句2 //int rsCount = callableStatement.getInt(3); //close ConnectionHelper.closeConnection(callableStatement, connection); 三、重点来了,返回记录集,多记录集 注意,不需要注册返回结果参数,只需要在sql中select出结果即可 例如:select * from tableName 即可得到返回结果 Connection connection = ConnectionHelper.getConnection(); CallableStatement callableStatement = connection.prepareCall("{ call procedureName(?) }"); //此处参数与结果集返回没有关系 callableStatement.setString(1, "xxxxxxxx"); callableStatement.execute(); ResultSet resultSet = callableStatement.getResultSet(); //以上两个语句,可以使用ResultSet resultSet = callableStatement.executeQuery();替代 //多结果返回 ResultSet resultSet2; if (callableStatement.getMoreResults()) { resultSet2 = callableStatement.getResultSet(); while (resultSet2.next()) { } } //close ConnectionHelper.closeConnection(callableStatement, connection); 提示:多结果返回可以使用如下代码(以上主要让大家明白,单一结果和多结果的区别): Boolean hasMoreResult = true; while (hasMoreResult) { ResultSet resultSet = callableStatement.getResultSet(); while (resultSet.next()) { } hasMoreResult = callableStatement.getMoreResults(); }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值