封装好的DB类如何进行事务的提交和回滚
已经写好的Db类,代码如下:
- Java code
public class Db { /** * @param args */ //dbUrl数据库连接串信息,其中“1521”为端口,“ora9”为sid private String dbUrl = "jdbc:oracle:thin:@192.168.86.204:1521:qc"; //theUser为数据库用户名 private String usr = "god"; //thePw为数据库密码 private String psw = "onmygod"; //几个数据库变量 private Connection con = null; private Statement sta = null; private ResultSet rs = null; //初始化连接 public void dbconn() { try { Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); //与url指定的数据源建立连接 con = DriverManager.getConnection(dbUrl, usr, psw); //采用Statement进行查询 sta = con.createStatement(); } catch (Exception e) { e.printStackTrace(); } } //执行查询 public ResultSet select(String sql) { dbconn(); try { rs=sta.executeQuery(sql); //Statement的executeQuery()方法则是用于SELECT等查询数据库的SQL,executeUpdate()方法会返回int结果,表示记录变动的数目,executeQuery()方法会返回java.sql.ResultSet对象 } catch (SQLException e) { // TODO 自动生成 catch 块 e.printStackTrace(); } return rs; } //执行增删改 public int change(String sql) { dbconn(); int i=0; try { i=sta.executeUpdate(sql); } catch (SQLException e) { // TODO 自动生成 catch 块 e.printStackTrace(); return i; } return i; } //关闭连接 public void close() { try { if (rs != null) rs.close(); } catch (SQLException e) { e.printStackTrace(); } finally { try { if (sta != null) sta.close(); } catch (SQLException e) { e.printStackTrace(); } finally { if (con != null) try { con.close(); } catch (SQLException e) { e.printStackTrace(); } } } }}在别的地方对数据进行多条语句的操作,希望全部语句执行成功才提交,要怎么写呢,声明的类变量没办法访问con,就没办法用法con.setAutoCommit(autoCommit);肿么写...
[解决办法]
把获取连接的代码提到外面不就行了吗...
最多加个控制符,如果没有手动设置autoCommit的话就自动获取连接,否则就用手动控制
[解决办法]
楼上的思路是最简单可行的。
事务和连接直接相关,你把连接控制好了,做为参数传递即可。
[解决办法]
不要每次操作都重置connection
- Java code
//执行增删改 public int change(String sql) { [color=#FF0000]dbconn();[/color] int i=0; try { i=sta.executeUpdate(sql); } catch (SQLException e) { // TODO 自动生成 catch 块 e.printStackTrace(); return i; } return i; }
[解决办法]
[解决办法]
如果非要用这个类,那没办法控制事务,你必需修改这个类,就如同楼上各位说的.......
[解决办法]
弄个构造方法,在里面连接数据库,操作数据库时使用这个连接,然后写个获取连接的方法,使用拿到的连接控制是否自动提交。
不过问题是conn.Commit()会抛出SQLException异常,你必须得处理这些东西,这样数据层的代码就会上移到业务逻辑层,感觉不是很好。。。。