天天看点

泛型反射数据库通用连接类

package dao;

import java.lang.reflect.Field;

import java.lang.reflect.ParameterizedType;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.List;

public abstract class GenericDAO<T>  

{  

    public static final String DRIVER="com.microsoft.sqlserver.jdbc.SQLServerDriver";

 public static final String URL="jdbc:sqlserver://localhost:1433;databasename=restrant";

 public static final String DBNAME="sa";

 public static final String DBPASS="sa1234";

 private Connection conn=null;

 private PreparedStatement pstmt=null;

 private ResultSet rs=null;

 public void getConn() {

  try {

   Class.forName(DRIVER);

   this.conn=DriverManager.getConnection(URL,DBNAME,DBPASS);

  } catch (ClassNotFoundException e1) {

   // TODO Auto-generated catch block

   e1.printStackTrace();

  }catch (SQLException e) {

   // TODO Auto-generated catch block

   e.printStackTrace();

  }

 }

 public void closeAll(){

  if(rs!=null){try{rs.close();}catch(Exception ex){ex.printStackTrace();}}

  if(pstmt!=null){try{pstmt.close();}catch(Exception ex){ex.printStackTrace();}}

  if(conn!=null){try{conn.close();}catch(Exception ex){ex.printStackTrace();}}

 }

 public List<T> executeSQL(String sql,String[] params){

  this.getConn();

  try {

   this.pstmt=this.conn.prepareStatement(sql);

   if(params!=null){

    for(int i=1;i<=params.length;i++){

     this.pstmt.setString(i, params[i-1]);

    }

   }

   this.rs=this.pstmt.executeQuery();

   int count=this.rs.getMetaData().getColumnCount();

   List<T> list=new ArrayList<T>();

   Class<T> cls=(Class<T>)((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[0];

   while(rs.next()){

    T t=(T)cls.newInstance();

    Field[] fields=cls.getDeclaredFields();

    for(int i=0;i<fields.length;i++){

     fields[i].setAccessible(true);

     fields[i].set(t, this.rs.getObject(fields[i].getName()));

    }

    list.add(t);

   }

   return list;

  } catch (SQLException e) {

   // TODO Auto-generated catch block

   e.printStackTrace();

   return null;

  }catch(InstantiationException e){

   // TODO Auto-generated catch block

   e.printStackTrace();

   return null;

  }catch(IllegalAccessException e){

   e.printStackTrace();

   return null;

  }finally{

   this.closeAll();

   rs=null;

   pstmt=null;

   conn=null;

  }

 }

 public int executeUpdate(String sql,String[]params){

  int result=-1;

  try{

   this.getConn();

   this.pstmt=this.conn.prepareStatement(sql);

   if(params!=null){

    for(int i=1;i<=params.length;i++)

     this.pstmt.setString(i, params[i-1]);

   }

   result=this.pstmt.executeUpdate();

   return result;

  }catch(Exception ex){

   ex.printStackTrace();

   return -1;

  }finally{

   this.closeAll();

   rs=null;

   pstmt=null;

   conn=null;

  }

 }