BaseDao加强版,可连接sqlserver和mysql,使用时直接在main类调用即可,需在src目录下创建一个properties后缀的文件夹,用来存放数据库名称和地址,具体如下

xiaoxiao2021-02-28  117

package com.hkd.basedao; import java.io.IOException; import java.io.InputStream; import java.lang.reflect.Field; 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; import java.util.Properties; public class BaseDao{ String DBUser; String DBPwd; String DBHost;//服务器地址 String DBName; int Port; int Port2; int DBType;//1 mysql 2 sqlserver 3 oracle; Connection conn; PreparedStatement ps; public ResultSet rs; public BaseDao(){ Properties pro=new Properties(); InputStream is=BaseDao.class.getClassLoader().getResourceAsStream("database.properties"); try { pro.load(is); DBUser=pro.getProperty("DBUser"); DBPwd=pro.getProperty("DBPwd"); DBHost=pro.getProperty("DBHost"); DBName=pro.getProperty("DBName"); Port=Integer.parseInt(pro.getProperty("Port")); DBType=Integer.parseInt(pro.getProperty("DBType")); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void open(){ try { if(DBType==1){ Class.forName("com.mysql.jdbc.Driver"); // jdbc:mysql://localhost:3306/数据库名 conn=DriverManager.getConnection("jdbc:mysql://"+DBHost+":"+Port+"/"+DBName, DBUser, DBPwd); }else if(DBType==2){ Class.forName("com.microsoft.sqlserver.sqlserverDriver"); //jdbc:sqlserver://localhost:1433;databasename=myschool conn=DriverManager.getConnection("jdbc:sqlserver://"+DBHost+":"+Port2+";databasename="+DBName, DBUser, DBPwd); }else{ } } catch (Exception e){ e.printStackTrace(); } } public void close(){ //后出现的先关闭 try { if(rs!=null){ rs.close(); } ps.close(); conn.close(); } catch (Exception e){ // TODO Auto-generated catch block e.printStackTrace(); } } /** * 执行增删改 * @param sql 所执行的sql语句 * @param params sql语句中的参数 * @return 受影响的行数 */ public int add(Object o){ int a=0; Class clz=o.getClass();//获取对象的类 String className=clz.getName();//获取完整名称,包括包名 //例如com.hkd.Student int p=className.lastIndexOf(".");//寻找最后一个点 className=className.substring(p+1);//从点后面开始截取字符串,截取到完整的类名 //insert into 表(列,列,列)values(值,值,值,值) StringBuffer sb=new StringBuffer(); sb.append("insert into "+className+"("); Field fs[]=clz.getDeclaredFields();//获取所有列 for (int i = 0; i < fs.length; i++) { if(i==fs.length-1){ sb.append(fs[i].getName());//最后一个不需要加逗号 }else{ sb.append(fs[i].getName()+",");//其他加逗号 } } sb.append(") values (");//开始values后面拼接 for (int i = 0; i < fs.length; i++) { if(i==fs.length-1){ sb.append("?");//最后一个不需要加 }else{ sb.append("?,");//1其他加逗号 } } sb.append(")");//sql完毕 Object parm[]=new Object[fs.length];//参数个数根据属性个数确定 try{ for (int i = 0; i < fs.length; i++) { fs[i].setAccessible(true);//强制访问属性 parm[i]=fs[i].get(o);//根据属性获取对象的属性值 } }catch (Exception e) { // TODO: handle exception e.printStackTrace(); } a=executeUpdate2(sb.toString(), parm);//执行 System.out.println(sb); return a; }     public int delete(Object o){     int a=0; Class clz=o.getClass();//获取对象的类 String className=clz.getName();//获取完整名称,包括包名 //例如com.hkd.Student int p=className.lastIndexOf(".");//寻找最后一个点 className=className.substring(p+1);//从点后面开始截取字符串,截取到完整的类名 //delete from 表 where id =? StringBuffer sb=new StringBuffer(); sb.append("delete from "+className+" where "); Field fs[]=clz.getDeclaredFields();//获取属性 sb.append(fs[0].getName()+" = ?");//拼接sql where 后面的主键列名 Object parm[]=new Object[1];//只有一个参数,主键的个数(就是为了访问主键) try { fs[0].setAccessible(true);//强制访问 parm[0]=fs[0].get(o);//只获取一个属性,(主键) } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } a=executeUpdate2(sb.toString(), parm); System.out.println(sb); return a;         }     public int update(Object o){     int a=0;     Class clz =o.getClass();//获取对象的类 String className=clz.getName();//获取完整名称,包括包名 //例如com.hkd.Student int p=className.lastIndexOf(".");//寻找最后一个点 className=className.substring(p+1);//从点后面开始截取字符串,截取到完整的类名 //delete from 表 where id =? StringBuffer sb=new StringBuffer(); sb.append("update "+className +" set "); Field fs[]=clz.getDeclaredFields(); for (int i = 0; i < fs.length; i++) { if(i==fs.length-1)//最后一个 sb.append(fs[i].getName()+"= ? "); else sb.append(fs[i].getName()+"= ? ,"); } sb.append("where "+fs[0].getName()+" = ?");//默认主键是第一个     Object parm[]=new Object[fs.length+1];//参数数组     try{     for (int i = 0; i < fs.length; i++) { fs[i].setAccessible(true);//强制访问 parm[i]=fs[i].get(o);//复制 }     parm[fs.length]=fs[0].get(o);//主键     }catch (Exception e) { // TODO: handle exception     e.printStackTrace(); }     a=executeUpdate2(sb.toString(), parm); System.out.println(sb);     return a;     }     public List select(Class clz,String where,Object parm[]){     List list =new ArrayList();     String className=clz.getName();     int p=className.lastIndexOf(".");//寻找最后一个点 className=className.substring(p+1);//从点后面开始截取字符串,截取到完整的类名 //insert into 表(列,列,列)values(值,值,值,值) StringBuffer sb=new StringBuffer(); sb.append("select * from "+className+" where "+where); rs=executeQuery(sb.toString(), parm); Field fs[]=clz.getDeclaredFields(); try{ while(rs.next()){ Object o=clz.newInstance();//创建对象 for (Field f : fs) { f.setAccessible(true); Object v =rs.getObject(f.getName()); f.set(o, v); } list.add(o); } close(); }catch (Exception e) { // TODO: handle exception e.printStackTrace(); }     return list;     }     public int executeUpdate(String sql,Object []params){ open(); int a=0; try{ ps=conn.prepareStatement(sql); if(params!=null){ for (int i = 0; i < params.length; i++) { ps.setObject(i+1,params[i]); } } a=ps.executeUpdate(); } catch (Exception e){ e.printStackTrace(); } close(); return a; } public int executeUpdate2(String sql,Object... params){ //...表示 可变参数 open(); int a=0; try{ ps=conn.prepareStatement(sql); if(params!=null){ for (int i = 0; i < params.length; i++) { ps.setObject(i+1,params[i]); } } a=ps.executeUpdate(); } catch (Exception e){ e.printStackTrace(); } close(); return a; } /** * 执行查询,返回结果集 * @param sql * @param params * @return 返回结果集 */ public ResultSet executeQuery(String sql,Object []params){ open(); try{ ps=conn.prepareStatement(sql); if(params!=null){ for (int i = 0; i < params.length; i++){ ps.setObject(i+1,params[i]); } } rs=ps.executeQuery(); }catch (Exception e){ e.printStackTrace(); } return rs; }

}

database.properties如下所示:

#database property DBUser=root DBPwd=root DBHost=localhost DBName=school Port=3306 Port2=1433 DBType=1

转载请注明原文地址: https://www.6miu.com/read-33939.html

最新回复(0)