展开全部
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);语句之后执行的数据库操作,保证系统运行出问题的情况下对数据库的数据无任何负面影响。