封装JDBC的一个通用增删改查工具类,将数据集rs转为list
来源:互联网 发布:谷歌浏览器怎么优化 编辑:程序博客网 时间:2024/05/16 08:24
import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import com.oracle.util.DBUtil;public class DBExcute { public static Connection conn; public static PreparedStatement ps; public static ResultSet rs;/**@author frunqer *@time 2016年5月11日 下午3:08:47 * 专门用来执行增删改的方法 */ public static boolean ExcuteNoQuery(String sql,Object[] params){ boolean flag=false; conn=DBUtil.getConn(); try { conn.setAutoCommit(false);//增删改是需要事物支持的 ps=conn.prepareStatement(sql); if(params!=null&¶ms.length>0){ for(int i=0;i<params.length;i++){ ps.setObject(i+1, params[i]); } } int result=ps.executeUpdate(); if(result>0){ flag=true; conn.commit(); } } catch (SQLException e) { e.printStackTrace(); try { System.out.println("@增删改出现异常,执行回滚操作@"); conn.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } } finally{ try { conn.setAutoCommit(true); } catch (SQLException e) { e.printStackTrace(); } DBUtil.closeConn(conn, ps, rs); } return flag; }/**@author frunqer *@time 2016年5月11日 下午3:10:24 * 聚合函数的查询,返回结果是一个一行一列的查询方式,例如count方法 */ public static int ExecuteScalar(String sql,Object[] params){ int scalar=0; conn=DBUtil.getConn(); try { ps=conn.prepareStatement(sql); if(params!=null&¶ms.length>0){ for(int i=0;i<params.length;i++){ ps.setObject(i+1, params[i]); } } rs=ps.executeQuery(); while(rs.next()){ scalar=rs.getInt(1); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ DBUtil.closeConn(conn, ps, rs); } return scalar; }/**@author frunqer *@time 2016年5月11日 下午3:20:53 * 专门用来执行查询操作 */ public static List<? extends Object> ExecuteReader(String sql,Object[] params,Class<?> clz){ List rslist=new ArrayList(); conn=DBUtil.getConn(); try { ps=conn.prepareStatement(sql); if(params!=null&¶ms.length>0){ for(int i=0;i<params.length;i++){ ps.setObject(i+1, params[i]); } } rs=ps.executeQuery(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } rslist=DBExcute.RsToList(rs, clz); return rslist; } /** * 查询单个实体 */ public static Object ExecuteObject(String sql,Object[] params,Class<?> clz){ Object object=null; conn=DBUtil.getConn(); try { ps=conn.prepareStatement(sql); if(params!=null&¶ms.length>0){ for(int i=0;i<params.length;i++){ ps.setObject(i+1, params[i]); } } rs=ps.executeQuery(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } object=DBExcute.RsToObject(rs, clz); return object; } /** * 自动封装 将将结果集自动转换为list * @param rs * @param clz * */ public static List<? extends Object> RsToList(ResultSet rs,Class clz){ List rslist=new ArrayList(); try { //获取数据集的元数据 ResultSetMetaData metaData=rs.getMetaData(); int clumnCount=metaData.getColumnCount(); Field[] fields=clz.getDeclaredFields(); /*for(int i=1;i<=clumnCount;i++){ String clumnName=metaData.getColumnName(i); }*/ while(rs.next()){ Object obj=clz.newInstance(); for(int i=1;i<=clumnCount;i++){ //获取数据库列名称的一些属性 String columnName=metaData.getColumnName(i); //列名 //int jdbcType=metaData.getColumnType(i); //数据库中的类型 String javaType=metaData.getColumnClassName(i); /*System.out.println("列类名:"+i+metaData.getColumnClassName(i));*/ String begin=columnName.substring(0, 1).toUpperCase(); //拼接set方法名称,以实现反射。 String end=columnName.substring(1, columnName.length()); String method="set"+begin+end; //获取列的值 Object columnValue=rs.getObject(i); //JDBC数据类型转换为JAVA数据类型 Class<?> javaTypeClass=Class.forName(javaType); /* Class typeClass=JDBCTypesUtils.jdbcTypeToJavaType(jdbcType);*/ Method setMethod=clz.getDeclaredMethod(method, javaTypeClass); setMethod.invoke(obj, columnValue); } rslist.add(obj); } } catch (SQLException | InstantiationException | IllegalAccessException | NoSuchMethodException | SecurityException | IllegalArgumentException | InvocationTargetException | ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } return rslist; } /** * 自动封装 将结果集自动转换为Object * @param rs * @param clz * */ public static Object RsToObject(ResultSet rs,Class clz){ Object object=null; try { //获取数据集的元数据 ResultSetMetaData metaData=rs.getMetaData(); int clumnCount=metaData.getColumnCount(); Field[] fields=clz.getDeclaredFields(); /*for(int i=1;i<=clumnCount;i++){ String clumnName=metaData.getColumnName(i); }*/ while(rs.next()){ object=clz.newInstance(); for(int i=1;i<=clumnCount;i++){ //获取数据库列名称的一些属性 String columnName=metaData.getColumnName(i); //列名 int jdbcType=metaData.getColumnType(i); //数据库中的类型 String javaType=metaData.getColumnClassName(i); /*System.out.println("列类名:"+i+metaData.getColumnClassName(i));*/ String begin=columnName.substring(0, 1).toUpperCase(); //拼接set方法名称,以实现反射。 String end=columnName.substring(1, columnName.length()); String method="set"+begin+end; //获取列的值 Object columnValue=rs.getObject(i); //JDBC数据类型转换为JAVA数据类型 Class javaTypeClass=Class.forName(javaType); /* Class typeClass=JDBCTypesUtils.jdbcTypeToJavaType(jdbcType);*/ Method setMethod=clz.getDeclaredMethod(method, javaTypeClass); setMethod.invoke(object, columnValue); } } } catch (SQLException | InstantiationException | IllegalAccessException | NoSuchMethodException | SecurityException | IllegalArgumentException | InvocationTargetException | ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } return object; }}
0 0
- 封装JDBC的一个通用增删改查工具类,将数据集rs转为list
- jdbc增删改查的工具类
- 基于jdbc 通用的增删改查
- Jdbc封装的增删查改
- Jdbc封装的增删查改
- DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类)
- java增删改查JDBC封装类
- 通用的增删改查 万能查询工具类
- sql数据增删改查的封装
- Hibernate4 一个baseDao的封装,包含一些通用的增删改查方法
- Android SQLite 一个工具类搞定基本的数据增删改查
- JDBC连接与增删查改的封装
- 提供一个可用的 lucene 增删改查工具类
- jdbc封装mySQL数据库增删改查
- 基于 iOS SQLite 增删改查基本方法的封装---通用式数据库访问类
- jdbc的增删改查
- JDBC的增删改查
- jdbc的增删改查
- 江西 学霸宿舍8个考研7个入了“985”
- 线程概念及死锁的理解
- 这样投简历,99%没面试机会!
- Number_Get_Next产生流水号
- 不错博客地址
- 封装JDBC的一个通用增删改查工具类,将数据集rs转为list
- 用实例分析H264 RTP payload(RTSP参数分析)
- Sencha Touch2 -- 11.1:定义具有关联关系的模型
- Android开发请求网络方式详解
- 利用Multipeer Connectivity框架进行WiFi传输
- 【bzoj1603】【 Usaco2008 Oct】打谷机 (阅读理解) 题解&代码
- git 分支详解
- 控制台打包unity C#代码为dll
- nRF51中关于SVCALL的使用