这是一个简单的jdbcBaseDao的封装。
自己写的。
面前能完成的一些功能,自己还算满意。正想搞个通用分页的。
坛子里找了下,发现有个可以,但是还是被人说出了很多缺点。。。。
所以,自己也有点信心不足了,特意发出来求虐!!!
希望大家把缺点说下,我改正!!谢谢
package com.demo.dao;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class BaseDao {
/**
* 获得连接
* @return
* @throws Exception
*/
public Connection getConn()throws Exception{
/* -***********************-mysql数据库-************************/
Class.forName("com.mysql.jdbc.Driver");
String uri="jdbc:mysql://localhost:3306/test?&useUnicode=true&characterEncoding=UTF-8";
return DriverManager.getConnection(uri,"root","123");
/* -***********************sqlserver2005数据库-*******************
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String uri="jdbc:sqlserver://127.0.0.1:1433;DataBaseName=master";
return DriverManager.getConnection(uri,"sa","123");*/
}
/**
* 关闭连接
* @param rs
* @param sm
* @param conn
*/
public void closeAll(ResultSet rs,Statement sm,Connection conn)throws Exception{
if(rs!=null) rs.close();
if(sm!=null) sm.close();
if(conn!=null) conn.close();
}
/**
* 增加,删除,修改
* @param sql
* @param args
* @return
*/
public boolean executeUpdate(String sql,Object[] args){
boolean flag=false;
Connection conn=null;
PreparedStatement sm=null;
try {
conn=this.getConn();
sm=conn.prepareStatement(sql);
if(conn != null){
for (int i = 0; i < args.length; i++) {
sm.setObject(i+1, args[i]);
}
}
if(sm.executeUpdate() > 0){
flag = true;
}
} catch (Exception e) {
// TODO: handle exception
}finally{
try {
this.closeAll(null, sm, conn);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return flag;
}
/**
* 查询方法
* @param sql
* @param args
* @return
*/
public List executeQuery(String sql,Object[] args,Class clazz){
List list=new ArrayList();
Connection conn = null;
PreparedStatement sm = null;
ResultSet rs = null;
try {
conn = this.getConn();
sm = conn.prepareStatement(sql);
if(args != null){
for (int i = 0; i < args.length; i++) {
sm.setObject(i+1, args[i]);
}
}
rs=sm.executeQuery();
while(rs.next()){
//通过反射得到一个对象
list.add(this.getObj(clazz, rs));
}
} catch (Exception e) {
// TODO: handle exception
}finally{
try {
this.closeAll(null, sm, conn);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return list;
}
public static Object getObj(Class clazz,ResultSet rs)throws Exception{
//所有的属性
Field[] field= clazz.getDeclaredFields();
Object info= clazz.newInstance();
for (int i = 0; i < field.length; i++) {
String name=field[i].getName().toUpperCase();
//得到方法名
name="set"+name.charAt(0)+name.substring(1).toLowerCase();
//得到类型
Class c=field[i].getType();
//得到方法
Method method= clazz.getMethod(name, c);
//实现方法
method.invoke(info, rs.getObject(i+1));
}
return info;
}
}