java常用工具类之数据库连接类(可以连接多种数据库)
程序员文章站
2024-02-27 16:41:27
依赖包下载:
数据库连接类源码:
package com.itjh.javautil;
import java.sql.connection;
impo...
依赖包下载:
数据库连接类源码:
package com.itjh.javautil; import java.sql.connection; import java.sql.drivermanager; import java.sql.preparedstatement; import java.sql.resultset; import java.sql.resultsetmetadata; import java.sql.sqlexception; import java.util.arraylist; import java.util.collections; import java.util.hashmap; import java.util.list; import java.util.map; import org.apache.commons.dbcp.connectionfactory; import org.apache.commons.dbcp.drivermanagerconnectionfactory; import org.apache.commons.dbcp.poolableconnectionfactory; import org.apache.commons.dbcp.poolingdriver; import org.apache.commons.dbutils.dbutils; import org.apache.commons.dbutils.queryrunner; import org.apache.commons.dbutils.handlers.maplisthandler; import org.apache.commons.pool.objectpool; import org.apache.commons.pool.impl.genericobjectpool; /** * 连接数据库的综合类。</br> * 依赖jar包:commons.dbcp-1.4,commons.dbutils-1.3,commons.pool-1.5.4包。 * * @author 宋立君 * @date 2014年07月03日 */ public class dbutil { private string dri = null; private string url = null; private string username = null; private string password = null; private string poolname = null; // 连接池名称 private objectpool connectionpool = null; // 连接池 // 对应的定时查询类 private querythread querythread = null; /** * 功能:构造函数 * * @author 宋立君 * @date 2014年07月03日 * @param dri * 驱动全类名,例如:com.mysql.jdbc.driver。 * @param url * 数据库url连接,例如: * "jdbc:mysql://127.0.0.1:3306/test?autoreconnect=true&useunicode=true&characterencoding=utf-8" * @param username * 数据库用户名,例如:root * @param password * 数据库密码,例如:abc * @param poolname * 创建的数据库连接池的名称,例如mypool,注意一个web容器此名称不能重复。 */ public dbutil(string dri, string url, string username, string password, string poolname) { this.dri = dri; this.url = url; this.username = username; this.password = password; this.poolname = poolname; } /** * 执行sql。 * * @param conn * 连接 * @param pstm * preparedstatement * @return int 执行sql对应的影响行。 * @throws sqlexception * @author 宋立君 * @date 2014年07月03日 */ public int execute(connection conn, preparedstatement pstm) throws sqlexception { try { return pstm.executeupdate(); } finally { close(conn); } } /** * 查询sql。 * * @param conn * 连接 * @param pstm * preparedstatement * @return list<map<string,object>> 查询的结果集 * @throws sqlexception * @author 宋立君 * @date 2014年07月03日 */ public list<map<string, object>> query(connection conn, preparedstatement pstm) throws sqlexception { try { return resultsettolist(pstm.executequery()); } finally { close(conn); } } /** * 功能:resultset 转为list<map<string,object>> * * * @param rs * resultset 原始数据集 * @return list<map<string,object>> * @throws java.sql.sqlexception * @author 宋立君 * @date 2014年07月03日 */ private list<map<string, object>> resultsettolist(resultset rs) throws java.sql.sqlexception { if (rs == null) return collections.empty_list; resultsetmetadata md = rs.getmetadata(); // 得到结果集(rs)的结构信息,比如字段数、字段名等 int columncount = md.getcolumncount(); // 返回此 resultset 对象中的列数 list<map<string, object>> list = new arraylist<map<string, object>>(); map<string, object> rowdata = new hashmap<string, object>(); while (rs.next()) { rowdata = new hashmap<string, object>(columncount); for (int i = 1; i <= columncount; i++) { rowdata.put(md.getcolumnname(i), rs.getobject(i)); } list.add(rowdata); } return list; } /** * 查询sql语句。 * * @param sql * 被执行的sql语句 * @return list<map<string,object>> * @throws sqlexception * @author 宋立君 * @date 2014年07月03日 */ public list<map<string, object>> query(string sql) throws sqlexception { list<map<string, object>> results = null; connection conn = null; try { conn = getconnection(); queryrunner qr = new queryrunner(); results = qr.query(conn, sql, new maplisthandler()); } finally { close(conn); } return results; } /** * 根据参数查询sql语句 * * @param sql * sql语句 * @param param * 参数 * @return list<map<string,object>> * @throws sqlexception * @author 宋立君 * @date 2014年07月03日 */ public list<map<string, object>> query(string sql, object param) throws sqlexception { list<map<string, object>> results = null; connection conn = null; try { conn = getconnection(); queryrunner qr = new queryrunner(); results = (list<map<string, object>>) qr.query(conn, sql, param, new maplisthandler()); } catch (sqlexception e) { e.printstacktrace(); } finally { close(conn); } return results; } /** * 执行sql语句 * * @param sql * 被执行的sql语句 * @return 受影响的行 * @throws exception * @author 宋立君 * @date 2014年07月03日 */ public int execute(string sql) throws exception { connection conn = getconnection(); int rows = 0; try { queryrunner qr = new queryrunner(); rows = qr.update(conn, sql); } finally { close(conn); } return rows; } /** * 执行含参数的sql语句 * * @param sql * 被执行的sql语句 * @param params * 参数 * @return 返回受影响的行 * @throws exception * @author 宋立君 * @date 2014年07月03日 */ public int execute(string sql, object[] params) throws exception { connection conn = getconnection(); int rows = 0; try { queryrunner qr = new queryrunner(); rows = qr.update(conn, sql, params); } finally { close(conn); } return rows; } /** * 关闭连接 * * @param conn * @throws sqlexception * @author 宋立君 * @date 2014年07月03日 */ public void close(connection conn) throws sqlexception { if (conn != null) { conn.close(); } dbutils.closequietly(conn); } /** * 启动连接池 * * @author 宋立君 * @date 2014年07月03日 */ private void startpool() { try { class.forname(dri); } catch (classnotfoundexception e1) { e1.printstacktrace(); } if (connectionpool != null) { shutdownpool(); } try { connectionpool = new genericobjectpool(null); connectionfactory connectionfactory = new drivermanagerconnectionfactory( url, username, password); poolableconnectionfactory poolableconnectionfactory = new poolableconnectionfactory( connectionfactory, connectionpool, null, "select 1", false, true); class.forname("org.apache.commons.dbcp.poolingdriver"); poolingdriver driver = (poolingdriver) drivermanager .getdriver("jdbc:apache:commons:dbcp:"); driver.registerpool(poolname, poolableconnectionfactory.getpool()); } catch (exception e) { e.printstacktrace(); } // 开启查询程序 querythread = new querythread(this); querythread.start(); } /** * 关闭连接池 * * @author 宋立君 * @date 2014年07月03日 */ private void shutdownpool() { try { poolingdriver driver = (poolingdriver) drivermanager .getdriver("jdbc:apache:commons:dbcp:"); driver.closepool(poolname); // 关闭定时查询 querythread.setstartquery(false); } catch (sqlexception e) { e.printstacktrace(); } } /** * 得到一个连接 * * @return * @author 宋立君 * @date 2014年07月03日 */ public synchronized connection getconnection() { connection conn = null; try { if (connectionpool == null) startpool(); conn = drivermanager.getconnection("jdbc:apache:commons:dbcp:" + poolname); } catch (exception e) { e.printstacktrace(); } return conn; } } /** * 当连接池启动后会自动定时查询数据库,防止数据库连接超时。 * * @author 宋立君 * @date 2014年07月03日 */ class querythread extends thread { private dbutil dbutil = null; // 是否开启查询 private boolean startquery = true; /** * 功能:对应的数据库连接。 * * @author 宋立君 * @date 2014年07月03日 * @param dbutil * 数据库连接 */ public querythread(dbutil dbutil) { this.dbutil = dbutil; } public void run() { while (true) { try { if (startquery) { this.dbutil.query("select 1"); } // system.out.println(startquery+" 123"); } catch (exception e) { e.printstacktrace(); } finally { try { thread.sleep(120000); } catch (interruptedexception e) { e.printstacktrace(); } } } } public void setstartquery(boolean startquery) { // system.out.println("startquery shut:"+startquery); this.startquery = startquery; } }
上一篇: 如何为RecyclerView添加分隔线
下一篇: 在MySQL中使用序列的简单教程
推荐阅读
-
java常用工具类之数据库连接类(可以连接多种数据库)
-
java使用jdbc连接数据库工具类和jdbc连接mysql数据示例
-
java使用jdbc连接数据库工具类和jdbc连接mysql数据示例
-
java数据库操作类演示实例分享(java连接数据库)
-
通过代理类实现java连接数据库(使用dao层操作数据)实例分享
-
php入门之连接mysql数据库的一个类_PHP
-
java数据库操作类演示实例分享(java连接数据库)
-
php入门之连接mysql数据库的一个类
-
php入门之连接mysql数据库的一个类_PHP教程
-
mysql-Java Web连接MySql数据库,修改数据库连接类中的用户名和密码没有效果?