日期:2014-05-16  浏览次数:20469 次

网上发现的一个不错的使用jdbc进行增删改查的封装类,(没有测试,但是看着没有问题)
package com.sj.utils;
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.SQLException;

import java.util.ArrayList;

import java.util.List;


public class BaseDao {
	/**
	*查询方法
	*/
	public static List findAll(Object obj,Connection conn) throws Exception{
		Class clazz=obj.getClass();
		//获取传入的实体中的所有的方法
		Method[] m=clazz.getMethods();
		//获取传入实体中的所有的属性
		Field[] f=clazz.getDeclaredFields();
		//建立结果集List接收对象
		List list=new ArrayList();
		//创建sql语句
		String sql="select * from  "+obj.getClass().getSimpleName().toLowerCase();
		System.out.println(sql);
		//System.out.println(sql);
		//预编译sql语句
		PreparedStatement pst=conn.prepareStatement(sql);
		//执行预编译的语句,获取结果集
		ResultSet rs=pst.executeQuery();
		//从结果集中循环取出放入结果集List
		while(rs.next()){
			Object obj2=clazz.newInstance();
			
			for(int i=0;i<f.length;i++){
				//取出属性名
				String n=f[i].getName();
				//获取结果集的单个的对象
				Object ob=rs.getObject(i+1);
				if(ob==null){
					ob="a";//防止数据为null时引发空指针异常
				}
				//判断单个结果的对象类型
				if(ob.getClass().equals(java.lang.String.class)){
					
					/*
					 * 拼接Set方法。
					 */
					for(int j=0;j<m.length;j++){
						if(("set"+n).equalsIgnoreCase(m[j].getName())){
							//执行指定的对象中的方法,并肩参数传入
							m[j].invoke(obj2, rs.getString(n));
						}
					}
					
				}else{
					for(int j=0;j<m.length;j++){
						if(("set"+n).equalsIgnoreCase(m[j].getName())){
							m[j].invoke(obj2, rs.getInt(n));
						}
					}
				}
				
			}
			list.add(obj2);
			
		}
		
		return list;
	}
	
	/**
	*保存方法
	*/
	public static void save(Object obj,Connection conn) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, SQLException{
		Class clazz=obj.getClass();
		Method[] m=clazz.getDeclaredMethods();
		Field[] f=clazz.getDeclaredFields();

		String table=clazz.getSimpleName().toLowerCase();

		String sql="";
		for(int i=0;i<f.length;i++){
			sql=sql+f[i].getName()+",";
		}
		sql=sql.substring(0, sql.length()-1);
		String sql2="";
	
		for(int j=0;j<f.length;j++){
			
			String str="get"+f[j].getName();
			
			for(int k=0;k<m.length;k++){
				
				if(str.equalsIgnoreCase(m[k].getName())){
					//判断。这个地方有bug
					/*
					 * new 出来到对象没有这个方法需要的属性
					 */
			
					Object p=m[k].invoke(obj);
			
					if(p==null){
						p="null";
						sql2=sql2+p+",";
					}else{
					sql2=sql2+"'"+p+"'"+",";
					}
				}
			}	
			
		}
		sql2=sql2.substring(0,sql2.length()-1);
		sql="insert into "+table+"("+sql+")"+" values"+"("+sql2+")";
		System.out.println(sql);
		PreparedStatement pst=conn.prepareStatement(sql);
		pst.executeUpdate();
	}
	
	
	
	/**
	*更新数据
	*/
	public static void update(Object obj,Connection conn) throws Exception{
        //修改
        Class clazz=obj.getClass();
        Method[] m=clazz.getMethods();
        Field[] f=clazz.getDeclaredFields();
        /*
         * 拼接Sql
         */
        String str1="";
        String str3="";
        for(int i=0;i<f.length;i++){
            //str1=str1+","+f[i].getName()+"="+"?";
            for(int j=0;j<m.length;j++){
                String str2="get"+f[i].getName();
                if(str2.equalsIgnoreCase(m[j].getName())){
                    str1=str1+f[i].getName()+"="+"'"+m[j].invoke(obj)+"'"+",";
                    if("getId".equalsIgnoreCase(m[j].getName())){
                     str3=m[j].invoke(obj).toString();
                    }
                }