DBManager.java
public class DBManager { // 连接数据库 public static Connection getConnection() { Connection con = null; try { Class.forName("com.mysql.jdbc.Driver"); con = DriverManager.getConnection("jdbc:mysql://localhost/site", "root", "root"); return con; } catch (Exception e) { System.out.println(e); return null; } } // 关闭数据库 public static void close(ResultSet rs, PreparedStatement ps, Connection con) { if (rs != null) { try { rs.close(); } catch (Exception e) { System.out.println(e); } } if (ps != null) { try { ps.close(); } catch (Exception e) { System.out.println(e); } } if (con != null) { try { con.close(); } catch (Exception e) { System.out.println(e); } } } }
UserDAO.java
public class UserDAO { public void delUser(int id) { Connection con=null; PreparedStatement ps=null; ResultSet rs=null; String sql="delete from user where id=?"; try{ con=DBManager.getConnection(); ps=con.prepareStatement(sql); ps.setInt(1, id); ps.executeUpdate(); }catch(Exception e){ System.out.println(e); }finally{ DBManager.close(rs, ps, con); } } }
假如我想一次删除多个用户,而我取的是不同用户的ID.我的做法是写个循环语句,而这个循环语句应写到那个位置比较适合.
方法1:在另一个文件里写上个循环句语,来调用UserDAO.java文件里的删除用户方法,但是这样做法会造成数据源的不断打开与关闭,会不会造成性能问题的下降(我不清楚).
方法2:与方法1差不多,只是把关闭数据源的操作写到另一个文件里而不在写到UserDAO的删除用户方法里,这样在循环语句结束之后,再关闭数据源,不会造成数据源的不断打开与关闭,我感觉这样写的话好像有点不统一,有点乱.
方法3:在另一个文件里把用户ID存到一个List里,然后做为参数传到UserDAO里的删除用户方法,在删除用户方法里写上循环语句.如下所示:
public void delUser(List idList) { Connection con=null; PreparedStatement ps=null; ResultSet rs=null; try{ for(XXX){ String sql="delete from user where id=?"; con=DBManager.getConnection(); ps=con.prepareStatement(sql); ps.setInt(1, id); ps.executeUpdate(); } }catch(Exception e){ System.out.println(e); }finally{ DBManager.close(rs, ps, con); } }
这样的写法我感觉不错,但是我有个疑点就是对于con ps rs这样对象我们可以重复利用吗?会不会造成一些不必要的麻烦?不知道大家有什么的想法.
附加:关于事务这方面我应该怎么写,不然的话删除一半用户时突然程序或者数据库有问题时而另一半用户没删除,造成原子的不一致性,那就有麻烦了