package com.dao.impl;
import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
/**
* 所有dao的父类
* Date : 1111年11月11日
* @description :
*/
public class BaseDao {
protected Connection con;
protected PreparedStatement ps;
protected ResultSet rs;
public void setConnection(){
try {
Class.forName("org.gjt.mm.mysql.Driver");
con = DriverManager.getConnection
("jdbc:mysql://localhost:3306/product?characterEncoding=utf-8","root","123456");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void closeConnection(){
try {
if(rs != null){
rs.close();
}
if(ps != null){
ps.close();
}
if(con != null){
con.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* @Title : updateData
* @Description : TODO 更新数据
* @param : @param sql sql语句
* @param : @param valueArray 值列表
* @return : void
* @throws
*/
public void updateData(String sql,Object[] valueArray){
this.setConnection();
try {
//执行sql语句
ps = con.prepareStatement(sql);
//填充占位符
for(int i=0;i<valueArray.length;i++){
ps.setObject(i+1, valueArray[i]);
}
//更新数据库
ps.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
this.closeConnection();
}
}
/**
* @Title : findData
* @Description : TODO 查询数据
* @param : @param sql 查询sql语句
* @param : @param valueArray 值列表
* @param : @param beanClass 集合中存放对象的类型
* @param : @return 查询结果的集合
* @return : List
* @throws
*/
public List findData(String sql,Object[] valueArray,Class beanClass){
List list = new ArrayList();
this.setConnection();
try {
ps = con.prepareStatement(sql);
if(valueArray != null){
for(int i=0;i<valueArray.length;i++){
ps.setObject(i+1, valueArray[i]);
}
}
rs = ps.executeQuery();
//得到结果集的审视对象
ResultSetMetaData rm = rs.getMetaData();
//得到结果集中的查询的列数
int columnCount = rm.getColumnCount();
// System.out.println(columnCount+" "+rm.getColumnName(1));
while(rs.next()){
Object beanObj = beanClass.newInstance();
//有几列,循环几次
for(int i=1;i<=columnCount;i++){
//得到查询列的列名
String columnName = rm.getColumnName(i);
//得到该列名对应的值
Object valueObj = rs.getObject(columnName);
//得到属性名对应的属性对象
Field field = beanClass.getDeclaredField(columnName);
//去掉访问修饰符检查
field.setAccessible(true);
//将对象的指定属性填充值
field.set(beanObj, valueObj);
}
list.add(beanObj);
}
// while(rs.next()){
// //每循环一次产生新的实体对象
// Object beanObj = beanClass.newInstance();
//
//
//
//如果只查询部分字段,会抛出很多异常,效率低
//得到所有属性列表
// Field[] fs = beanClass.getDeclaredFields();
//
// for(Field field : fs){
//
// try{
// //得到属性名
// String fieldName = field.getName();
// //从结果集中,得到指定列的值
// Object valueObj = rs.getObject(fieldName);
//
// //去掉访问修饰分的检查
// field.setAccessible(true);
//
//
// //设置指定的属性值
// field.set(beanObj, valueObj);
//
// }catch(Exception e){
//
// continue;
//
// }
// }
// list.add(beanObj);
//
// }
} catch (Exception e) {
e.printStackTrace();
}finally{
this.closeConnection();
}
return list;
}
// public static void main(String[] args) {
//
// BaseDao dao = new BaseDao();
// dao.setConnection();
// System.out.println(dao.con);
//
// }
}