数据批处理
可以进行多个数据的操作。
public class TestAddBath {
public static void main(String[] args) throws SQLException {
TestOne.getConnection();
}
}
class TestOne {
static Connection con = null;
static PreparedStatement ps = null;
{
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static Connection getConnection() throws SQLException {
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root");
con.setAutoCommit(false);
ps = con.prepareStatement("insert into tanx(name) values(?)");
for (int i = 0; i < 10; ++i) {
ps.setObject(1, "111");
//数据批处理
ps.addBatch();
}
//数据批处理
ps.executeBatch();
return con;
}
}
结果:
事务控制
在没有事务回滚时,当多个数据进行操作时,一个出错,其他的仍然会成运行,而事务回滚则是在多个数据有一个出错时,就会回到没有操作之前,要么就一起成功,要么就一起失败。
事务有四个特性,ACID事务描述的缩写:
1,原子性(atomic),事务由一个或多个行为捆绑在一起构成,好像是一个单独的工作单元。原子性保证事务内的操作要么都发生,要么都不发生。假如所有的操作都成功了,那么事务是成功的。加入任何一个操作失败,那么事务会进行回滚。
2,一致性(consistent),一旦一个事务结束了,不管成功还是失败,系统所处的状态和它的业务规则是一致的。也就是说,数据应当不会被破坏。
3,隔离性(isolation),事务应当允许多名用户操作同一个数据,一个用户的操作不会和其他用户的操作相混淆。因此,事务必须是隔离的,防止并行读写同一个数据的情况发生。注意,隔离通常意味着要锁定数据库的表或行。
4,持久性(durable),一旦事务完成,事务的结果应当持久化。这样不管什么样的系统崩溃,它们都能幸免于难。
示例:
public class TestAddBath {
public static void main(String[] args) throws SQLException {
TestOne.getConnection();
}
}
class TestOne {
static Connection con = null;
static PreparedStatement ps = null;
{
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static Connection getConnection() throws SQLException {
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root");
//JDBC默认采用的是自动事务,它的特性就是一个出错,其他的正常运行,不能事务回滚,必须关闭
con.setAutoCommit(false);
ps = con.prepareStatement("insert into tanx(name) values(?)");
try{
for (int i = 0; i < 10; ++i) {
ps.setObject(1, "111");
//数据批处理
ps.addBatch();
}
}catch (Exception e){
//回滚操作
con.rollback();
}
//数据批处理
ps.executeBatch();
return con;
}
}