您的位置:首页 > 编程语言 > Java开发

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

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

代码如下:

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关闭:/article/4429809.html

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

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

http://www.iteye.com/problems/35375
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: