mysql commit用法_mysql transaction的commit到底怎么用

展开全部

e5a48de588b662616964757a686964616f31333337613864Connection con=null;

PreparedStatement pstm=null;

String strpath = "D:/Lionel/img";

try {

//建立连接

Class.forName("com.mysql.jdbc.Driver");

con = DriverManager.getConnection("jdbc:mysql://localhost:3306/webstore","root","3121");

//事务处理--关闭自动提交

con.setAutoCommit(false);

//获取Statement对象--准备好静态框架语句

pstm = con.prepareStatement("insert into blobtest (name,picture) values (?,?)");

File fpath = new File(strpath);

if(fpath.canRead()){

//直接拿到File 对象

File[] listFiles = fpath.listFiles();

for (int i = 0; i 

if(listFiles[i].isFile()){

//插读管道--[DBF_BF]

FileInputStream fis = new FileInputStream(listFiles[i]);

BufferedInputStream bis = new BufferedInputStream(fis);

//设置动态参数

pstm.setString(1,listFiles[i].getName());

pstm.setBinaryStream(2, fis,fis.available());

//发送语句

pstm.execute();

//关闭管道

bis.close();

fis.close();

}

}

}

//提交

con.commit();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (ClassNotFoundException e) {

e.printStackTrace();

} catch (SQLException e) {

try {

//回滚

con.rollback();

} catch (SQLException e1) {

e1.printStackTrace();

}

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}finally{

try {

//关闭JDBC对象

pstm.close();

con.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

总体思想就是, commit是用来做事务处理的, 进行数据操作修改、删除、插入之前,先关闭数据库的autocommit功能,然后通过 tay catch 来进行手动的事务处理,这样会更安全。

上边那个例子  是一个blob类型数据插入的实例。关于文件那部分自动过滤掉,不用看。

下面是伪代码

try{

//事务处理--关闭自动提交

con.setAutoCommit(false);

//执行增、删、改操作。

.......

//提交事务

con.commit();

}catch{

//输出错误信息。

//然后回滚。取消掉之前未完成的增、删、改操作。

con.rollback

//关闭JDBC连接

pstm.close();

con.close();

}

这样可以保证所有正常的增、删、改在执行正确的时候可以正常执行,而一旦报错,或执行到一半的时候出现问题,则回滚所有在con.setAutoCommit(false);语句之后执行的数据库操作,保证系统运行出问题的情况下对数据库的数据无任何负面影响。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值