使用java对操作数据库的封装例子

最初自己写的代码经常出现游标超出最大值的问题,后参考几篇博文后改进了下,虽然仍不够完善,但是和最初相比已经有了很大的改善。

代码如下:

 

private SQLException exception = null;  //定义一个异常

private Connection con = pool.getConnection();// 从连接池中获得一个连接

 

public int delete(String sql) throws SQLException{
  
  int resultNum =-1;
  
  try {
      //创建数据库操作集
   sta = con.createStatement();
      resultNum = sta.executeUpdate(sql);
  } catch (SQLException e) {
   con.rollback();
   exception = e;
   e.printStackTrace();
   throw new SQLExceptio("数据库操作失败!");
  }
  return resultNum;
  
 }

 

 

public int insert(String sql) throws SQLException {
  int resultNum = -1;
  try {
   //创建数据库操作集
   sta = con.createStatement();
   //执行插入语句返回插入的行数,若插入失败返回-1
   resultNum = sta.executeUpdate(sql);
  
  } catch (SQLException e) {
   con.rollback();
   exception = e;
   e.printStackTrace();
   throw new SQLException("数据库操作失败!");
  }
  return resultNum;
  
 }

 

public ResultSet query(String sql) throws SQLException {

  //con = DbConnectionFactory.getInstance().getConnection();
  ResultSet reuSet = null;
  try {
      //创建数据库操作集
   sta = con.createStatement();
   //数据查询结果集
   reuSet = sta.executeQuery(sql);  
  } catch (SQLException e) {
   con.rollback();
   exception = e;
   e.printStackTrace();
     throw new SQLException("数据库操作失败!");
  }
  return reuSet;
 }

 

 

public void close(){
  
   try {
    if(exception==null){
     con.commit();
     System.out.println("正常comit");
    }
    if(sta!=null){
     //sta.CLOSE_CURRENT_RESULT;
     sta.close();
    }    
   } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  
  pool.relase(con);
 }

 

其中比较关键的点是红色字体标出的部门,首先定义一个sql异常的变量,主要用来判断是该执行commit还rollback。其次就是在每个执行方法中抛出异常后进行rollback和存储exception的值。

 

这样就不会出现我们在开发中经常遇到的程序操作经常出现一些莫名其妙的问题,比如:数据库中没有记录,在前台却能搜索出来,刷新后就又没有了,再刷新又出来了。这些问题就是在执行完sql后没有及时提交导致的。

 

参考的文章

 

1.关于建立一个异常变量的

private SQLException exception = null;  //定义一个异常

            一个关于老外的statement关闭:http://superleo.iteye.com/blog/161648

 

 

2.看到一哥们的关于数据库封装的求问:

主要关键点学习为抛出异常后的及时rollback:

            http://www.iteye.com/problems/35375

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值