1.数据库事务
事务:就是把多个增删改查合并。为一个事务。
在数据库中,所谓事务是指一组逻辑操作单元,有多个添加,多个修改,多个删除,连接到一起一次执行,要么成功要么失败 。 事务的操作:先定义开始一个事务,然后对数据作修改操作,这时如果提交(COMMIT),这些修改就永久地保存下来,如果回退(ROLLBACK),数据库管理系统将放弃所作的所有修改而回到开始事务时的状态。
2.手动提交事务
conn.setAutoCommit(false);//关闭自动提交事务
conn.commit();//提交事务
解决问题:
如果一个事务多个修改中间报错(网络中断等)就不提交事务。就解决一个加了钱,后面修改没有减钱等类似问题。
这是多个操作一定要手动提交事务。
如果出现异常。就rollback();方法回滚事务。
一般在finally写关闭数据库连接。
3.批量处理JDBC语句
理解为:集合里面有多条SQL语句,然后统一执行。
Connection connection=null;
connection=DButil.getConnection();
connection.setAutoCommit(false);//关闭自动提交事务
statement=connection.createStatement();
for(int i=0;i<100;i++)
{
statement.addBatch(“insert into commodity(comid,name,manufacturer,calls) values(”+i+",concat(‘裤子’,"+i+"),’"+i+"’,‘1234567’)");
}
statement.executeBatch();
connection.commit();//提交事务
4.数据库连接池
为解决传统开发中的数据库连接问题:
1)普通的JDBC数据库连接使用 DriverManager 来获取,每次向数据库建立连接的时候都要将 Connection 加载到内存中,再验证用户名和密码,需要数据库连接的时候,就向数据库要求一个,执行完成后再断开连接。这样的方式将会消耗大量的资源和时间。数据库的连接资源并没有得到很好的重复利用.若同时有几百人甚至几千人在线,频繁的进行数据库连接操作将占用很多的系统资源,严重的甚至会造成服务器的崩溃。
2)对于每一次数据库连接,使用完后都得断开。否则,如果程序出现异常而未能关闭,将会导致数据库系统中的内存泄漏,最终将导致重启数据库。
3)这种开发不能控制被创建的连接对象数,系统资源会被毫无顾及的分配出去,如连接过多,也可能导致内存泄漏,服务器崩溃。
如果报错
com.alibaba.druid.pool.DruidDataSource error 严重: testWhileIdle is true, validationQuery not set.
我们加参数。
一般也有这个红色的文字
这个是回馈信息,不是报错。是数据库已经初始化了!
5.连接数据池
1.导入一个jar包
2.写一个连接类
3.获取连接类的返回对象
4.进行正常数据库操作。
6.事务处理代码
出库时,库存表中商品数量要减少,库数量不能低于该商品的最低库存
1.出库要减少商品。就查询@商品表(select)商品数量,
2.查询结果,判断是否数量够,进行是否出库。不够回滚!
3.可以出库,就在@商品表中,减少商品数量(update)
4.然后,@出库表增加一条出库信息(insert)
一共有三次数据逻辑操作,然后统一提交事务。