问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java中的c3p0和proxool都分别是什么 能详细介绍一下么

发布网友 发布时间:2022-05-01 17:14

我来回答

3个回答

懂视网 时间:2022-05-01 21:36

proxool> <!-- 连接池别名 --> <alias>localmysqldb</alias> <!-- 连接数据库的驱动URL --> <driver-url><![CDATA[jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf-8]]></driver-url> <!-- 连接数据库的驱动类 --> <driver-class>com.mysql.jdbc.Driver</driver-class> <driver-properties> <property name="user" value="root"/> <property name="password" value="ROOT"/> </driver-properties> <!-- 处于睡眠的最大时间 --> <house-keeping-sleep-time>900000</house-keeping-sleep-time> <!-- 连接的最大活动时间 --> <maximum-active-time>500000</maximum-active-time> <!-- 最大的连接数量 --> <maximum-connection-count>10</maximum-connection-count> <!-- 最小的连接数量 --> <minimum-connection-count>4</minimum-connection-count> <!-- 检测连接是否处于空闲状态,执行这条语句来测试 --> <house-keeping-test-sql>select 1</house-keeping-test-sql> <prop key="hibernate.connection.release_mode">after_transaction</prop> </proxool> </proxool-config>

2。工具类

public class ClassUtil {
 
 /**
 * @param c
 * @return
 * @Author: 
 * @Description: 返回class文件所在的目录
 */
 public static String getClassPath(Class<?> c) {
 return c.getResource("").getPath().replaceAll("%20", " ");
 }
 
 /**
 * @param c
 * @return
 * @Author:
 * @Description: 返回class文件所在项目的根目录
 */
 public static String getClassRootPath(Class<?> c) {
 return c.getResource("/").getPath().replaceAll("%20", " ");
 }
 
 /**
 * @param c
 * @param hasName 是否包括class名
 * @return
 * @Author:lulei 
 * @Description: 返回class文件所在的目录
 */
 public static String getClassPath(Class<?> c, boolean hasName) {
 String name = c.getSimpleName() + ".class";
 String path = c.getResource(name).getPath().replaceAll("%20", " ");
 if (hasName) {
  return path;
 } else {
  return path.substring(0, path.length() - name.length());
 }
 }

}

3.数据库连接池配置加载类

public class DBPool {
 private String poolPath;//数据库连接池的配置文件路径
 
 private DBPool() {
 }
 
 /**
 * @return
 * @Author: 
 * @Description: 返回DBPool对象
 */
 public static DBPool getDBPool() {
 return DBPoolDao.dbPool;
 }

 /**
 *@Description: 静态内部类实现单例模式
 *@Author:
 *@Version:1.1.0
 */
 private static class DBPoolDao{
 private static DBPool dbPool = new DBPool();
 }
 
 public String getPoolPath() {
 if (poolPath == null) {
  //如果poolPath为空,赋值为默认值
  poolPath = ClassUtil.getClassRootPath(DBPool.class) + "proxool.xml";
 }
 return poolPath;
 }

 /**
 * @param poolPath
 * @Author: 
 * @Description: 设置数据库连接池的配置文件路径
 */
 public void setPoolPath(String poolPath) {
 this.poolPath = poolPath;
 }

}

 4.数据库连接池管理类

public class DBManager {
 
 private DBManager(){
 try {
  //数据库连接池配置文件
  JAXPConfigurator.configure(DBPool.getDBPool().getPoolPath(), false);
  //数据库加载驱动类
  Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
 } catch (Exception e) {
  // TODO Auto-generated catch block 
  e.printStackTrace();
 }
 }
 
 /**
 * @param poolName
 * @return
 * @throws SQLException
 * @Author:
 * @Description: 获取数据库连接
 */
 public Connection getConnection(String poolName) throws SQLException {
 return DriverManager.getConnection(poolName);
 }
 
 /**
 *@Description: 内部静态类实现单例模式 
 *@Author:
 *@Version:1.1.0
 */
 private static class DBManagerDao {
 private static DBManager dbManager = new DBManager();
 }
 
 /**
 * @return
 * @Author:
 * @Description: 返回数据库连接池管理类
 */
 public static DBManager getDBManager() {
 return DBManagerDao.dbManager;
 }

}

5. sql语句参数转化

public class DBOperation {
 private String poolName;//数据库连接池别名
 private Connection con = null;//数据库连接
 
 public DBOperation(String poolName) {
 this.poolName = poolName;
 }
 
 /**
 * @Author: 
 * @Description:关闭数据库连接
 */
 public void close() {
 try {
  if (this.con != null) {
  this.con.close();
  }
 } catch (Exception e) {
  e.printStackTrace();
 }
 }
 
 /**
 * @throws SQLException
 * @Author:lulei 
 * @Description: 打开数据库连接
 */
 private void open() throws SQLException {
 //先关闭后打开,防止数据库连接溢出
 close();
 this.con = DBManager.getDBManager().getConnection(this.poolName);
 }
 
 /**
 * @param sql
 * @param params
 * @return
 * @throws SQLException
 * @throws ClassNotFoundException
 * @Author: 
 * @Description: sql语句参数转化
 */
 private PreparedStatement setPres(String sql, HashMap<Integer, Object> params) throws SQLException, ClassNotFoundException{
 if (null == params || params.size() < 1) {
  return null;
 }
 PreparedStatement pres = this.con.prepareStatement(sql);
 for (int i = 1; i <= params.size(); i++) {
  if (params.get(i) == null) {
  pres.setString(i, "");
  } else if (params.get(i).getClass() == Class.forName("java.lang.String")) {
  pres.setString(i, params.get(i).toString());
  } else if (params.get(i).getClass() == Class.forName("java.lang.Integer")) {
  pres.setInt(i, (Integer) params.get(i));
  } else if (params.get(i).getClass() == Class.forName("java.lang.Long")) {
  pres.setLong(i, (Long) params.get(i));
  } else if (params.get(i).getClass() == Class.forName("java.lang.Double")) {
  pres.setDouble(i, (Double) params.get(i));
  } else if (params.get(i).getClass() == Class.forName("java.lang.Flaot")) {
  pres.setFloat(i, (Float) params.get(i));
  } else if (params.get(i).getClass() == Class.forName("java.lang.Boolean")) {
  pres.setBoolean(i, (Boolean) params.get(i));
  } else if (params.get(i).getClass() == Class.forName("java.sql.Date")) {
  pres.setDate(i, java.sql.Date.valueOf(params.get(i).toString()));
  } else {
  return null;
  }
 }
 return pres;
 }
 
 /**
 * @param sql
 * @return
 * @throws SQLException
 * @Author: 
 * @Description: 执行SQL语句,返回影响行数
 */
 public int executeUpdate(String sql) throws SQLException {
 this.open();
 Statement state = this.con.createStatement();
 return state.executeUpdate(sql);
 }
 
 /**
 * @param sql
 * @param params
 * @return
 * @throws SQLException
 * @throws ClassNotFoundException
 * @Author:
 * @Description: 执行sql语句,返回影响行数
 */
 public int executeUpdate(String sql, HashMap<Integer, Object> params) throws SQLException, ClassNotFoundException {
 this.open();
 PreparedStatement pres = setPres(sql, params);
 if (null == pres) {
  return 0;
 }
 return pres.executeUpdate();
 }
 
 /**
 * @param sql
 * @return
 * @throws SQLException
 * @Author: 
 * @Description: 执行sql语句,返回结果集
 */
 public ResultSet executeQuery(String sql) throws SQLException {
 this.open();
 Statement state = this.con.createStatement();
 return state.executeQuery(sql);
 }
 
 /**
 * @param sql
 * @param params
 * @return
 * @throws SQLException
 * @throws ClassNotFoundException
 * @Author:
 * @Description:执行sql语句,返回结果集
 */
 public ResultSet executeQuery(String sql, HashMap<Integer, Object> params) throws SQLException, ClassNotFoundException {
 this.open();
 PreparedStatement pres = setPres(sql, params);
 if (null == pres) {
  return null;
 }
 return pres.executeQuery();
 }

}

6.数据基本操作

public class DBServer {
 private DBOperation dbOperation;
 
 public DBServer(String poolName) {
 dbOperation = new DBOperation(poolName);
 }
 
 /**
 * @Author: 
 * @Description: 关闭数据库连接
 */
 public void close() {
 dbOperation.close();
 }
 
 /**
 * @param sql
 * @return
 * @throws SQLException
 * @Author:
 * @Description: 数据库新增操作
 */
 public int insert(String sql) throws SQLException {
 return dbOperation.executeUpdate(sql);
 }
 
 /**
 * @param tableName
 * @param columns
 * @param params
 * @return
 * @throws SQLException
 * @throws ClassNotFoundException
 * @Author: 
 * @Description: 数据库新增操作
 */
 public int insert(String tableName, String columns, HashMap<Integer, Object> params) throws SQLException, ClassNotFoundException {
 String sql = insertSql(tableName, columns);
 return dbOperation.executeUpdate(sql, params);
 }
 
 /**
 * @param sql
 * @return
 * @throws SQLException
 * @Author: 
 * @Description: 数据库删除操作
 */
 public int delete(String sql) throws SQLException {
 return dbOperation.executeUpdate(sql);
 }
 
 /**
 * @param tableName
 * @param condition
 * @return
 * @throws SQLException
 * @Author:lulei 
 * @Description: 数据库删除操作
 */
 public int delete(String tableName, String condition) throws SQLException {
 if (null == tableName) {
  return 0;
 }
 String sql = "delete from " + tableName + " " + condition;
 return dbOperation.executeUpdate(sql);
 }
 
 /**
 * @param sql
 * @return
 * @throws SQLException
 * @Author: 
 * @Description: 数据库更新操作
 */
 public int update(String sql) throws SQLException {
 return dbOperation.executeUpdate(sql);
 }
 
 /**
 * @param tableName
 * @param columns
 * @param condition
 * @param params
 * @return
 * @throws SQLException
 * @throws ClassNotFoundException
 * @Author: 
 * @Description: 数据库更新操作
 */
 public int update(String tableName, String columns, String condition, HashMap<Integer, Object> params) throws SQLException, ClassNotFoundException {
 String sql = updateSql(tableName, columns, condition);
 return dbOperation.executeUpdate(sql, params);
 }
 
 /**
 * @param sql
 * @return
 * @throws SQLException
 * @Author: 
 * @Description: 数据库查询操作 
 */
 public ResultSet select(String sql) throws SQLException {
 return dbOperation.executeQuery(sql);
 }
 
 /**
 * @param tableName
 * @param columns
 * @param condition
 * @return
 * @throws SQLException
 * @Author:lulei 
 * @Description: 数据库查询操作
 */
 public ResultSet select(String tableName, String columns, String condition) throws SQLException {
 String sql = "select " + columns + " from " + tableName + " " + condition;
 return dbOperation.executeQuery(sql);
 }
 
 /**
 * @param tableName
 * @param columns
 * @param condition
 * @return
 * @Author: 
 * @Description: 组装 update sql eg: update tableName set column1=?,column2=? condition 
 */
 private String updateSql(String tableName, String columns, String condition) {
 if (tableName == null || columns == null) {
  return "";
 }
 String[] column = columns.split(",");
 StringBuilder sb = new StringBuilder();
 sb.append("update ");
 sb.append(tableName);
 sb.append(" set ");
 sb.append(column[0]);
 sb.append("=?");
 for (int i = 1; i < column.length; i++) {
  sb.append(", ");
  sb.append(column[i]);
  sb.append("=?");
 }
 sb.append(" ");
 sb.append(condition);
 return sb.toString();
 }
 
 /**
 * @param tableName
 * @param columns
 * @return
 * @Author:
 * @Description: 组装 insert sql eg: insert into tableName (column1, column2) values (?,?)
 */
 private String insertSql(String tableName, String columns) {
 if (tableName == null || columns == null) {
  return "";
 }
 int n = columns.split(",").length;
 StringBuilder sb = new StringBuilder("");
 sb.append("insert into ");
 sb.append(tableName);
 sb.append(" (");
 sb.append(columns);
 sb.append(") values (?");
 for (int i = 1; i < n; i++) {
  sb.append(",?");
 }
 sb.append(")");
 return sb.toString();
 }

}

 

Java数据库连接池-proxool

标签:jdbc   参考   manager   数据库   long   object   length   resource   after   

热心网友 时间:2022-05-01 18:44

两个都是开源数据库连接池框架, JDBC连接你应该知道.

连接池是为了避免过多的开启数据库链接导致的资源消耗,由连接池在系统创建初始创建一定数量的数据库连接放到连接池中,这些连接的数量是由最小数据库连接数来设定的,
无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中。其实就是为了节约资源

数据库框架hibernate就都支持这两个连接池

热心网友 时间:2022-05-01 20:02

c3p0---->http://ke.baidu.com/view/920062.htm
proxool-->http://ke.baidu.com/view/2098784.htm
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
心理咨询师培训怎么收费标准是多少 2024心理咨询师培训费用是多少钱 心理咨询师培训费用大概是多少 心理咨询师培训课程收费标准 新蒙迪欧空调怎么用? 福特蒙迪欧16款2.0T冷车启动怠速会一抖一抖的是什么情况 牛油果冻了还能吃不 牛油果冻过了能吃吗 泰兴人很有钱吗? 江苏有多少百万人口以上的城市 淘宝的阿里宝卡能在网上激活吗 淘宝的阿里宝卡能在网上激活吗 收了一张阿里宝卡,一直没有打开,今天才打开卡,怎么激活失败了? 阿里小宝卡显示已激活,但是实名制二次审核未通过,如果不使用的话,会进联通黑名单吗 中国联通阿里小宝卡是不是都是这么卡这么慢? 联通阿里宝卡激活的方法? 联通的菜鸟宝卡刚弄好实名制,审核需要多久? 想了解乒乓球规则 如何理解乒乓球比赛规则中所规定的发球?如何??? 为什么没有键盘 关于乒乓球比赛规则是怎样的? 推荐一个黑轴带小键盘的机械键盘,全键无按键冲突的,200块钱左右的 新版百度浏览器怎么关闭下面一直出现的弹窗 请问百度浏览器页面,本来一打开就有很多新闻,就在搜索框下面,不知道怎么回事,就剩下一个搜索框了, 如何把百度浏览器自带的这种新闻资讯完全关闭只保留最简洁的搜索引擎功能,或者把软件字体改成繁体。 举例说明对乒乓球比赛中规则的理解 国际乒乓球比赛规则是什么 键盘无按键冲突这是什么意思? 华为手机怎么自动设置不方便接听提示? 乒乓比赛规则 心理学考研有那些机构? 心理学考研在成都是否有培训机构 心理学考研辅导班选择哪家效果好? 心理学考研班,报哪家效果好? 想找一个好的心理学考研培训机构!推荐一个吧!北京的 考研心理学哪个机构好,心理学考研培训机构哪个好 心理学考研哪家机构好 应用心理学考研报哪个辅导机构好? 报过班的前辈们给点建议吧!谢谢。 准备跨考心理学研究生,大家有报班么?报的哪个机构?求推荐良心辅导班 谁能给我介绍一个好点的心理学考研培训班 考研心理学的辅导班有没有可以的? 312心理学考研报班有推荐吗? 312心理学考研辅导机构哪家强? 想参加21年心理学考研,求比较靠谱的网上学习的报班机构? 心理学考研辅导班哪个好? 心理学考研培训班哪个最专 业 考研心理学辅导班,哪个名气大些? 19考研 应心347 什么机构的网课或面授比较靠谱 没有电脑,只有路由器可以上wifi吗? 有网线但是没有电脑,有路由器可以连wifi吗?