浏览 1512 次
锁定老帖子 主题:瞎改的东西
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-02-06
最后修改:2009-08-22
用Hibernate 的感觉 搞来搞去的东西太多了。 用Ibatis 的感觉 和Hibernate 差不多。
他们两个用的文件甚多...弄来弄去。太麻烦了,无聊时间写了个 支持多种形式操作的 JDBC 操作数据库的持久方法
mport java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.xzj.common.DataBaseUtil; /** * Support Map String[] Object * * 参数必须是#name#形式 * * 删除不支持多个相同的 ID 删除 如果要用只能用 String[] 形式传参 * * @author Administrator * */ public class JdbcAction implements Jdbc { private Connection con; private PreparedStatement ptmst; private ResultSet rs; public JdbcAction(){ con=DBConnection.getConnection(); } /** * 直接执行 add,update,delete Method * * @param sql * @return Integer */ public int executeSQL(String sql){ int rows=0; try { ptmst=con.prepareStatement(sql); rows=ptmst.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); }finally{ DataBaseUtil.close(con, ptmst); } return rows; } /** * 带参数的处理的 add,update,delete Method * @param sql * @param obj * @return Integer */ public int executeSQL(String sql,Object obj){ int rows=0; try { con.setAutoCommit(false); rows=executeSql(sql,obj).executeUpdate(); con.commit(); } catch (SQLException e) { try { con.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } e.printStackTrace(); }finally{ DataBaseUtil.close(con, ptmst); } return rows; } public Object selectObjResult(String sql,Object param,Object obj){ List<Object> list=selectResult(sql,param,obj); return list.size()==0?null:list.get(0); } public List<Object> selectResult(String sql,Object param,Object obj){ List<Object> list=new ArrayList<Object>(); try { rs=executeSql(sql,obj).executeQuery(); /** * explain: * get select result column name */ ResultSetMetaData rsmd=rs.getMetaData(); int columnCount=rsmd.getColumnCount(); String [] column=new String[columnCount]; for(int k=1;k<=columnCount;k++){ column[k-1]=rsmd.getColumnName(k); } /** * get select data * */ Object objSelect=null; while(rs.next()){ try { objSelect=obj.getClass().newInstance(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } list.add(instantiationObjectData(objSelect,rs,column)); } } catch (SQLException e) { e.printStackTrace(); }finally{ DataBaseUtil.close(con, ptmst, rs); } return list; } private Object getObjectValue(String columName,Object obj){ String methodName=""; Object rs=null; try { for(int k=0;k<obj.getClass().getDeclaredMethods().length;k++){ methodName=obj.getClass().getDeclaredMethods()[k].getName(); if(methodName.substring(0, 3).equals("get")&&methodName.substring(3, methodName.length()).toLowerCase().equals(columName.toLowerCase())){ rs=(Object) obj.getClass().getDeclaredMethods()[k].invoke(obj,new Object[]{}); break; } } } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch(Exception e){ e.printStackTrace(); } methodName=null; return rs; } private static Object instantiationObjectData(Object obj,ResultSet rs,String [] column){ String methodName=""; for(int k=0;k<obj.getClass().getDeclaredMethods().length;k++){ methodName=obj.getClass().getDeclaredMethods()[k].getName(); try { if(methodName.substring(0, 3).equals("set")){ for(int n=0;n<column.length;n++){ if(column[n].toLowerCase().equals(methodName.substring(3, methodName.length()).toLowerCase())){ obj.getClass().getDeclaredMethods()[k].invoke(obj,rs.getObject(column[n])); break; } } } } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch(Exception e){ e.printStackTrace(); } } methodName=null; return obj; } private PreparedStatement executeSql(String sql,Object obj){ //获得参数 String [] setParam=param(sql); for(int k=0;k<setParam.length;k++){ sql=sql.replace("#"+setParam[k]+"#", "?"); } try{ ptmst=con.prepareStatement(sql); if(null!=obj){ if(obj instanceof String[]){ String [] paramArray=(String []) obj; for(int k=0;k<setParam.length;k++){ ptmst.setObject(k+1,paramArray[k]); } }else if(obj instanceof int []){ int [] paramArray=(int []) obj; for(int k=0;k<paramArray.length;k++){ ptmst.setObject(k+1,paramArray[k]); } }else if(obj instanceof Map){ Map map=(Map)obj; for(int k=0;k<setParam.length;k++){ ptmst.setObject(k+1, map.get(setParam[k])); } }else { for(int k=0;k<setParam.length;k++){ ptmst.setObject(k+1, getObjectValue(setParam[k],obj)); } } } } catch (SQLException e) { e.printStackTrace(); } return ptmst; } private String [] param(String sql){ String [] sqlSet=sql.trim().split("#"); String [] setParam=new String[sqlSet.length/2]; for(int k=0;k<setParam.length;k++){ setParam[k]=sqlSet[(k+1)*2-1]; } return setParam; } }
那个数据库连接没写上去。。 不知道效率怎么样。没测试过。。里面还有好多需要优化。代码有些还不是很规范。。
下面是我用到的一些基本测试。 import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import com.xzj.domain.Student; public class JdbcTest { public static void testSave(){ Jdbc jdbc=JdbcUtil.JdbcAction(); Map map=new HashMap(); map.put("name", "周星驰"); map.put("sex", "女"); map.put("age", new Date()); Student stu=new Student(); stu.setName("冰山"); stu.setSex("女"); stu.setAge(new Date()); String sql="insert into Student(name,sex,age) values(#name#,#sex#,#age#)"; jdbc.executeSQL(sql, map); } public static void testUpdate(){ Jdbc jdbc=JdbcUtil.JdbcAction(); Map map=new HashMap(); map.put("id", 2); map.put("name", "周星驰"); map.put("sex", "男"); map.put("age", new Date()); String sql="update student set name=#name#,sex=#sex#,age=#age# where id=#id#"; jdbc.executeSQL(sql, map); } public static void testDelete(){ Jdbc jdbc=JdbcUtil.JdbcAction(); String [] sql={ "delete from Student where id=#id#", "delete from Student where id=#id# or id=#id#", "delete from Student where id=#id# or id=#id# or id=#id#"}; int []p={21,22,23}; jdbc.executeSQL(sql[2], p); } public static void testSelect(){ Jdbc jdbc=JdbcUtil.JdbcAction(); Student stu=new Student(); stu.setId(1001); stu.setName("测试"); stu.setSex("女"); stu.setAge(new Date()); List<Object> list=jdbc.selectResult("select id,name,sex,age from Student",null,stu); System.out.println("编号\t姓名\t性别\t年龄"); System.out.println("---------------------------------"); for(int k=0;k<list.size();k++){ stu=(Student) list.get(k); System.out.println(stu.getId()+"\t"+stu.getName()+"\t"+stu.getSex()+"\t"+stu.getAge()); } } public static void main(String [] args){ //testSave(); //testUpdate(); //testDelete(); testSelect(); } }
import java.util.Date; public class Student { private Integer id; private String name; private String sex; private Date age; private String born; public String getBorn() { return born; } public void setBorn(String born) { this.born = born; } public Date getAge() { return age; } public void setAge(Date age) { this.age = age; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } }
希望各位能给出指点。。修改一些不必之处。。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |