package com.core.util;import java.sql.connection;import java.sql.date;import java.sql.drivermanager;import java.sql.resultset;import java.sql.resultsetmetadata;import java.sql.sqlexception;import java.sql.statement;import java.sql.timestamp;import java.util.arraylist;import java.util.linkedhashmap;import java.util.list;import org.apache.commons.logging.log;import org.apache.commons.logging.logfactory;import com.core.exception.serviceexception;public final class dbutil { private static final log log = logfactory.getlog(dbutil.class); // 定义一个数据库连接对象 private dbutil() {} private static final threadlocal<connection> connection = new threadlocal<connection>(); public static connection getconnection() { connection conn = connection.get(); if(conn == null){ try { class.forname("org.logicalcobwebs.proxool.proxooldriver"); conn = drivermanager.getconnection("proxool.db"); connection.set(conn); } catch (classnotfoundexception e) { log.error("#error# :创建数据库连接发生异常,请检查!", e); }catch (sqlexception e) { log.error("#error# :创建数据库连接发生异常,请检查!", e); } } return conn; } /** * 执行数据库增、删、改操作. * * @param sql * 待操作的sql字符串 * @return 执行结果所影响的行数,异常则返回-1 * @throws sqlexception * @throws exception */ public static int executeupdate(string sql){ int exeok = -1; statement stmt = null; try { stmt = getconnection().createstatement(); exeok = stmt.executeupdate(sql); } catch (sqlexception e) { log.error("#error# :执行sql语句出错,请检查!\n" + sql, e); }finally{ close(stmt); } return exeok; } /** * 执行批处理操作一般用于事务 * * @param vsqlstr 传入的被操作sql字符串数组 * @return 执行批处理后所影响的行数 * @throws exception */ @suppresswarnings("unchecked") public static int[] executeupdate(list sqllist){ int updatecounts[] = null; statement stmt = null; connection conn = getconnection(); try { stmt = conn.createstatement(); conn.setautocommit(false); for (int i = 0; i < sqllist.size(); i++) { string sql = sqllist.get(i) + ""; stmt.addbatch(sql); } updatecounts = stmt.executebatch(); conn.commit(); conn.setautocommit(true); } catch (sqlexception e) { try { conn.rollback(); } catch (sqlexception e1) { log.error("#error# :执行数据回滚出错,请检查!", e); } log.error("#error# :执行批量sql语句出错,请检查!", e); }finally{ close(stmt); } return updatecounts; } @suppresswarnings("unchecked") public static rslist executequery(string query){ resultset resultset = null; resultsetmetadata metadata = null; rslist rs = null; statement stmt = null; try { stmt = getconnection().createstatement(); resultset = stmt.executequery(query); int colnumber = 0; linkedhashmap<string, string> recomap; string colname = ""; string colvalue = ""; rs = new rslist(); while(resultset != null && resultset.next()){ recomap = new linkedhashmap<string, string>(); metadata = resultset.getmetadata(); colnumber = metadata.getcolumncount(); for (int i = 1; i <colnumber+1;i++) { colname = metadata.getcolumnlabel(i) .tolowercase(); colvalue = resultset.getstring(i); if(!stringutil.isblank(colvalue)){ recomap.put(colname, colvalue); }else{ recomap.put(colname, ""); } } rs.add(recomap); } } catch (sqlexception e) { log.error("#error# :执行sql语句出错,请检查!\n" + query, e); } finally { close(stmt,resultset); } return rs; } /** * 取得数据库服务器的当前日期(年-月-日 时:分:秒)。 * @return 数据库服务器的当前日期,java.sql.timestamp对象。 */ public static timestamp getcurrenttime(){ string sql = "select sysdate as datevalue from dual"; resultset rs = null; timestamp dtrtn = null; statement stmt = null; try { stmt = getconnection().createstatement(); rs = stmt.executequery(sql); while (rs != null && rs.next()) { dtrtn = rs.gettimestamp(1); } } catch (sqlexception e) { log.error("#error# :执行sql语句出错,请检查!\n" + sql, e); } finally { close(stmt,rs); } return dtrtn; } /** * 取得数据库服务器的当前日期(年-月-日)。 * * @return 数据库服务器的当前日期,java.sql.date对象。 */ public static date getcurrentdate(){ string sql = "select sysdate as datevalue from dual"; resultset rs = null; date dtrtn = null; statement stmt = null; try { stmt = getconnection().createstatement(); rs = stmt.executequery(sql); while (rs != null && rs.next()){ dtrtn = rs.getdate(1); } } catch (sqlexception e) { log.error("#error# :执行sql语句出错,请检查!\n" + sql, e); } finally { close(stmt,rs); } return dtrtn; } /** * 取得某个序列对象的下一个id。 * * @param sequence * 该对象对应数据库中的sequence的名字。 * @return 该对象的下一个id,如果失败返回-1。 */ public static long getnextid(string sql){ resultset rs = null; long nextid = 1; statement stmt = null; try { stmt = getconnection().createstatement(); rs = stmt.executequery("select " + sql + ".nextval as id from dual"); while(rs != null && rs.next()) { nextid = rs.getlong(1); } } catch (sqlexception e) { log.error("#error# :执行sql语句出错,请检查!\n" + sql, e); } finally { close(stmt,rs); } return nextid; } /** * 获取结果集的记录段(用于分页) * @param query 查询字符串 * @param rowcount 总记录数 * @param currpage 当前页码 * @param pagesize 每页记录数 * @return rslist 记录内容列表 * @throws exception */ @suppresswarnings("unchecked") protected static rslist executequery(string query, int rowcount, int currpage, int pagesize){ resultset resultset = null; resultsetmetadata metadata = null; statement stmt = null; int startpostion =0; int endpostion =0; rslist rs = new rslist(); int pagecount = -1; try { if (rowcount <= 0) throw new serviceexception("记录总数小于0"); // 计算总页数 if (pagesize <= 0) pagesize = 10; pagecount = (rowcount + pagesize - 1) / pagesize; // 计算要显示的页码 if (currpage <= 0) currpage = 1; if (currpage > pagecount) currpage = pagecount; // 定位记录开始索引 if (pagecount > 0){ startpostion = (currpage - 1) * pagesize + 1; endpostion = (currpage - 1) * pagesize + pagesize; }else if(pagecount == 0){ startpostion = 1; endpostion = pagesize; } //新加代码 stringbuffer sql = new stringbuffer(); sql.append("select * from ( select row_.*, rownum rownum_ from ( "); sql.append(query.trim()); sql.append(") row_ where rownum <= ").append(endpostion).append(" ) where rownum_ >= ").append(startpostion); stmt = getconnection().createstatement(); resultset = stmt.executequery(sql.tostring()); int colnumber = 0; linkedhashmap<string, string> recomap; string colname = ""; string colvalue = ""; while(resultset != null && resultset.next()){ recomap = new linkedhashmap<string, string>(); metadata = resultset.getmetadata(); colnumber = metadata.getcolumncount(); for (int i = 1; i < colnumber + 1; i++) { colname = metadata.getcolumnlabel(i) .tolowercase(); colvalue = resultset.getstring(i); if(!stringutil.isblank(colvalue)){ recomap.put(colname, colvalue); }else{ recomap.put(colname, ""); } } rs.add(recomap); } } catch (sqlexception e) { log.error("#error# :执行分页查询出错,请检查!\n", e); } finally { close(stmt,resultset); } return rs; } /** * 获得查询总记录数(用于分页) * @param query 查询字符串 * @return rowcount -1: 无记录 * @throws exception */ @suppresswarnings("unchecked") protected static int getrowcount(string query){ resultset resultset = null; statement stmt = null; int rowcount = -1; try { //新加代码 stringbuffer sql = new stringbuffer(); sql.append("select count(*) from ( ").append(query.trim()).append(" )"); stmt = getconnection().createstatement(); resultset = stmt.executequery(sql.tostring()); while(resultset != null && resultset.next()) rowcount = resultset.getint(1); } catch (sqlexception e) { log.error("#error# :执行查询记录总数sql语句出错,请检查!\n" + query, e); } finally { close(stmt,resultset); } return rowcount; } /** * 获取结果集的记录段(用于分页) * @param query 查询语句 * @param currpage 查询页码 * @return * @throws exception */ @suppresswarnings("unchecked") public static list executequery(string query,string currpage){ int pagenum = 1; int rowcount = 0; list result = new arraylist(); rslist rs = new rslist(); try { if(!stringutil.isblank(currpage)) pagenum = integer.valueof(currpage.trim()).intvalue(); rowcount = getrowcount(query); if(rowcount > 0 ){ rs = executequery(query,rowcount,pagenum,golbalparameter.page_size); } }catch (exception e) { log.error("#error# :执行sql语句出错,请检查!\n" + query, e); }finally{ result.add(rowcount); result.add(rs); } return result; } public static void begintransaction(){ connection conn = getconnection(); try { if(conn != null) conn.setautocommit(false); } catch (sqlexception e) { log.error("#error# :执行开启事务出错,请检查!\n", e); } } public static void committransaction(){ connection conn = connection.get(); try { if(conn != null){ conn.commit(); conn.setautocommit(true); } } catch (sqlexception e) { log.error("#error# :执行提交事务出错,请检查!\n", e); } } public static void rollbacktransaction(){ connection conn = connection.get(); try { if(conn != null) conn.rollback(); } catch (sqlexception e) { log.error("#error# :执行回滚事务出错,请检查!\n", e); } } /** * 关闭数据操作对象resultset * * @param rs 数据结果集对象 */ public static void close(resultset rs){ if (rs != null){ try { rs.close(); } catch (sqlexception e) { log.error("#error# :关闭resultset发生异常,请检查!\n", e); } rs = null; } } protected static void close(statement stmt){ if (stmt != null){ try { stmt.close(); } catch (sqlexception e) { log.error("#error# :关闭statement发生异常,请检查!\n", e); } stmt = null; } } /** * 关闭数据操作对象statement、resultset * * @param stmt * @param rs 数据结果集对象 */ protected static void close(statement stmt, resultset rs) { if (rs != null){ try { rs.close(); } catch (sqlexception e) { log.error("#error# :关闭resultset发生异常,请检查!\n", e); } rs = null; } if (stmt != null){ try { stmt.close(); } catch (sqlexception e) { log.error("#error# :关闭statement发生异常,请检查!\n", e); } stmt = null; } } /** * 关闭数据库连接对象connection释放资源 */ public static void close(){ connection conn = connection.get(); connection.set(null); if (conn != null){ try { conn.close(); } catch (sqlexception e){ log.error("#error# :关闭数据库连接发生异常,请检查!\n", e); } conn = null; } }}
分享到:
相关推荐
- **概念理解**:首先需要理解Hibernate的基本概念,包括Session、SessionFactory、Transaction等核心组件的作用。 - **环境搭建**:配置开发环境,包括安装必要的库文件(如Hibernate核心库、数据库驱动等),以及...
- 配置Hibernate Session Factory,以便在应用程序中创建和管理Hibernate会话。 ```xml <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> ...
- **使用DbUtils等工具简化JDBC**:为了简化这些操作,出现了像DbUtils这样的工具,它们提供了一些辅助类来简化JDBC的操作。例如,在上面的部分内容中展示了使用DbUtils实现基本的增删查改操作的例子。 尽管这些...
JDBC-→dbutils(自动封装)-→MyBatis-→Hibernatesession.get(Class c, id);//查找映射文件(全类名-表名,属性名与表字 段名)/表 select * from users where id=? User user = session.getSession(userClass, id) ...
Hibernate) or direct hibernate session2014七夕献礼,庆祝自己向证明注孤生迈出了更加坚实的一步Authorzoowii()Features底层基于JPA或者Hibernate的Session/SessionFactory,基于HQL/SQL,比自己再轮一个类HQL稳定...
在项目中配置 Hibernate,包括数据库连接信息、实体类的映射文件(通常为 XML 或注解形式),然后就可以通过 Hibernate 提供的 Session 接口进行数据操作,如 CRUD(创建、读取、更新、删除)操作。 总之,...
包括hibernate框架项目搭建编写;优化登录实现;一个完整的自动登录的实现,主要技术MD5加密、cookie和session判断;dbutils框架项目,旨在了解dbutils的各种内幕;文件上传下载项目等等。。这里不再细说了,感兴趣...
try (SqlSession session = DBUtils.getSession()) { MyMapper mapper = session.getMapper(MyMapper.class); List<MyEntity> entities = mapper.selectAll(); for (MyEntity entity : entities) { System.out....
18.3 关于hibernate框架中一些通用类 18.4 实现hibernate分页系统前期准备 18.5 关于hibernate分页系统的具体实现 18.6 关于hibernate分页系统的表示层 18.7 多学两招——分页标签 18.8 小结 第19...
8. **数据库工具**:DBUtils是Apache提供的一个实用工具库,简化了JDBC的使用,例如提供数据库连接池功能,使得数据库操作更加便捷。 9. **前端技术**:HTML、CSS和JavaScript是构建Web页面的基础,HTML定义结构,...
【jun_dao_hibernate】 【jun_datasource】 【jun_dbutil】 【jun_designpattern】 【jun_distributed_session】 【jun_email】 【jun_executor】 【jun_fileupload】 【jun_freemarker】 【jun_httpclient】 【jun...