jdbc 通用dbHepler 类,充分利用jdbc 知识与反射的原理。
实现步骤如下:
1、加载驱动
//这里以sqlserver 为例
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
2、获取连接
con=DriverManager.getConnection("jdbc:sqlserver://localhost:;databaseName=bbs", "root","a");
3.1、通用查询
通用查询的原理是:
获得查询结果集中的数据库字段,再利用反射的技术,找出字段在对象的 setXX() 方法,利用Method.invoke() 方法,进行设置。所以这里注意,数据库中的字段一定与javabean中的属性保持一致
3.2 增删改都是用同一个方法即可
4、操作完成后进行关闭
关闭时一定要注意顺序
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
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.sql.Statement;
import java.util.ArrayList;
import java.util.List;
public class DBHelper {
protected Connection con;
protected PreparedStatement pstmt;
protected ResultSet rs;
/*
* 静态语句快
*/
static{
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public List getObject(Class entity,String sql,List<String> params) throws SQLException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{
List list=new ArrayList();
Object o=null;
con=this.getCon();
pstmt=con.prepareStatement(sql);
rs=pstmt.executeQuery();
//取出结果集中有多少个字duan
ResultSetMetaData metadata=rs.getMetaData();
// 将所有的字duan名存入到一个数组中
String[] columnnames=new String[metadata.getColumnCount()];
for(int i=0;i<metadata.getColumnCount();i++){
String columname=metadata.getColumnName(i+1);
columnnames[i]=columname;
}
//取出这个类的所有的方法
Method[] methods=entity.getMethods();
while(rs.next()){
o=entity.newInstance();
for(Method m:methods){
String methodname=m.getName();
for(int i=0;i<columnnames.length;i++){
String mn=columnnames[i];
System.out.println("取出列名:"+mn);
String mname="set"+mn.substring(0,1).toUpperCase()+mn.substring(1);
//判断mname与 m对象的名字是否相同
if(mname.equals(m.getName())){
System.out.println("当前方法:"+m.getName());
m.invoke(o, rs.getObject(mn));
}
}
}
list.add(o);
}
return list;
}
/*
* 获取连接
*/
public Connection getCon(){
try {
//15173276960
con=DriverManager.getConnection("jdbc:sqlserver://localhost:;databaseName=bbs", "root","a");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return con;
}
public void closeAll(Connection con,PreparedStatement pstmt ,ResultSet rs){
if(rs !=null){
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(pstmt !=null){
try {
pstmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(con !=null){
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public int update(String sql,List<String> params){
int result=0;
try {
con=this.getCon();
pstmt=con.prepareStatement(sql);
if(params !=null && params.size()>0){
for(int i=0;i<params.size();i++){
pstmt.setString(i+1,params.get(i));
}
}
result=pstmt.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
this.closeAll( con, pstmt,rs);
}
return result;
}
}