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 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 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; } public int Add(Object o){ int a=0; //获取表明 Class clz=o.getClass();//获取对象得嘞 String classname=clz.getName();//获取完整的名称,包括包名 int p=classname.lastIndexOf(".");//寻找最后一个点 classname=classname.substring(p+1);//从点后面开始截取 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 ("); for (int i = 0; i < fs.length; i++) { if(i==fs.length-1) sb.append("?");//最后一个不加逗号 else sb.append("?,");//其他加逗号 } 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 (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } a=executeUpdate(sb.toString(), parm); System.out.println(sb); return a; } public int del(Object o){ int a=0; //获取表明 Class clz=o.getClass();//获取对象得嘞 String classname=clz.getName();//获取完整的名称,包括包名 int p=classname.lastIndexOf(".");//寻找最后一个点 classname=classname.substring(p+1);//从点后面开始截取 StringBuffer sb=new StringBuffer(); sb.append("delete from "+classname +" where "); Field[] fs=clz.getDeclaredFields();//获取 sb.append(fs[0].getName()+" = ?"); Object[] parm=new Object[1]; fs[0].setAccessible(true); try { parm[0]=fs[0].get(o); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } a=executeUpdate(sb.toString(), parm); return a; } public int update(Object o){ int a=0; //获取表明 Class clz=o.getClass();//获取对象得嘞 String classname=clz.getName();//获取完整的名称,包括包名 int p=classname.lastIndexOf(".");//寻找最后一个点 classname=classname.substring(p+1);//从点后面开始截取 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 (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } a=executeUpdate(sb.toString(), parm); 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);//从点后面开始截取 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 fi : fs) { fi.setAccessible(true); Object v=rs.getObject(fi.getName()); fi.set(o,v); } list.add(o); } close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return list; } public Object find(Class clz,String where, Object[] parm){ Object o=null; List list=select(clz, where, parm); if(list.size()>0) o=list.get(0); return o; } }
查询
Object parm[]={id}; List<Student> list=bs.select(Student.class, "id=?", parm);
for (Student st : list) { st.show(); }
映射 由类生成对象 对象.set属性(值) 对象.方法() 反射 由对象得到类 由属性调用对象 Field.set(对象,值) 由方法调用对象 Method.invoke(对象,参数) 获取类的方法 Class c1=类型.class;根据类名获取类 Class c2=对象.getClass();//根据对象获取类 Class c3=Class.forName("包名.类名"); //获取某个属性 Field f=Class.getDeclaredField("名称");//根据名称获取属性 Field[] f=Class.getDeclaredFields();//获取全部属性 field.setAccessable(true);//强制访问 获取方法 Method m=class.getDeclareMethod("名称",参数列表); Method[] m=class.getDeclareMethods();//得到所有方法