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;
}
}
封装JDBC的一个通用增删改查工具类,将数据集rs转为list
最新推荐文章于 2024-10-26 16:19:33 发布