14mysql事务、数据库连接池、Tomcat-2018/07/26

  • 1.mysql事务

    • 事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部不成功。
    • MySQL手动控制事务
      • 开启事务:start transaction | begin
      • 提交事务:commit
      • 回滚事务:rollback
    • JDBC如何控制事务
      • conn.setAutoCommit(false);
      • conn.commit;
      • conn.rollback;在异常中写
  • 2.事务的特性
    • 原子性:指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
    • 一致性:事务必须使数据库从一个一致性状态变换到另外一个一致性状态。转账前和转账后的总金额不变。
    • 隔离性:事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
    • 持久性:指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。
  • 4.事务的隔离级别
    • 赃读:指一个事务读取了另一个事务未提交的数据。
    • 不可重复读:在一个事务内读取表中的某一行数据,多次读取结果不同。一个事务读取到了另一个事务提交后的数据(update)
    • 虚读(幻读):是指在一个事务内读取到了别的事务插入的数据,导致前后读取不一致(insert)
    • 数据库通过设置事务的隔离级别防止以上情况的发生:
      • 1.READ UNCOMMITTED: 赃读、不可重复读、虚读都有可能发生。
      • 2.READ COMMITTED: 避免赃读。不可重复读、虚读都有可能发生。(oracle默认的)
      • 4.REPEATABLE READ:避免赃读、不可重复读。虚读有可能发生。(mysql默认)
      • 8.SERIALIZABLE: 避免赃读、不可重复读、虚读。
      • 级别越高,性能越低,数据越安全。
      • conn.setTransactionIsolation(int level);
  • 5.数据库连接池
    • 提高性能
    • 编写标准的数据源
      • javax.sql.DataSource接口,一般都叫数据源
    • 装饰设计模式:使用频率很高
      • 目的:改写已存在的类的某个方法或某些方法,装饰设计模式(包装模式)
      • 口诀:
        • 1、编写一个类,实现与被包装类相同的接口。(具备相同的行为)
        • 2、定义一个被包装类类型的变量。
        • 3、定义构造方法,把被包装类的对象注入,给被包装类变量赋值。
        • 4、对于不需要改写的方法,调用原有的方法。
        • 5、对于需要改写的方法,写自己的代码。
    • 默认适配器:装饰设计模式一个变体
  • 6.常用的数据源配置

    • DBCP:Apache推出的Database Connection Pool

      • 使用步骤:

        • 添加jar包 commons-dbcp-1.4.jar & commons-pool-1.5.6.jar
        • 添加属性资源文件(放在src下边)dbcpconfig.properties
        • 编写数据源工具类 getconnection里边return BasicDataSourseFatory.createDataSource(p); p.load(DBCPUtils.class.getClassLoader().getReSourceAsStream("dbcpconfig.properties");
    • C3P0

      • 使用步骤:

        • 1、添加jar包
        • 2、编写配置文件:c3p0-config.xml,建一个Lib文件夹,放在classpath中,或classes目录中 //得到一个数据源 private static DataSource dataSource = new ComboPooledDataSource();

          //从数据源中得到一个连接对象 public static Connection getConnection(){ try { return dataSource.getConnection(); } catch (SQLException e) { throw new RuntimeException("服务器错误"); } }

  • 7.用JavaWeb服务器管理数据源:Tomcat
    • 添加context.xml放到应用文件里或直接在tomcat的conf/context.xml里边添加内容(可以同时多个应用一起)
    • Context initContext = new InitialContext(); DataSource ds = (DataSource)initContext.lookup("java:/comp/env/jdbc/itheima"); Connection conn = ds.getConnection();
  • 8.DBUtils
    • DBUtils封装了对JDBC的操作,简化了JDBC操作。可以少写代码。
    • 三个核心对象
      • QueryRunner类

        • QueryRunner中提供对sql语句操作的API.
        • 主要的三个方法
          • query() 用于执行select
          • update() 用于执行insert update delete
          • batch() 批处理
      • ResultSetHandler接口:用于定义select操作后,怎样封装结果集
      • DBUtils类:一个工具类,定义了关闭资源与事务处理的方法
    • 使用
      • 导包
      • QueryRunner qr = new QueryRunner(C3P0Util.getDataSource()); List list = qr.query("select * form users",new BeanListHandler(User.class));
  • 9.QueryRunner对象
    • 构造函数:

      • new QueryRunner(); 它的事务可以手动控制。也就是说此对象调用的方法(如:query、update、batrch)参数中要有Connection对象。
      • new QueryRunner(DataSource ds); 它的事务是自动控制的。一个sql一个事务。此对象调用的方法(如:query、update、batrch)参数中无需Connection对象。
    • 方法:
      • 返回 T;query(String sql,ResultSet rsh,Object...params);最后一个可变参数0 -> 无穷
      • 返回 T;query(Connection conn,String sql,ResultSet rsh,Object...params);
      • 返回int(修改的行数) update(String sql,Object ...params)
      • 返回int(修改的行数) update(Connection conn,String sql,Object ...params)
      • 只能执行相同的SQL语句,批量修改;返回int[] ;batch(String sql,Object[][]params)二维数组第一个中括号是指执行多少次语句,第二个是有问号的值得个数。
      • batch(Connection conn,String sql,Object[][]params)
  • 10.ResultSetHandler接口
    • ArrayHandler:适合取1条记录。把该条记录的每列值封装到一个数组中Object[]
    • ArrayListHandler:适合取多条记录。把每条记录的每列值封装到一个数组中Object[],把数组封装到一个List中
    • ColumnListHandler(int key):取某一列的数据。封装到List中。
    • KeyedHandler(int key):取多条记录,每一条记录封装到一个Map中,再把这个Map封装到另外一个Map中,key为指定的字段值。
      • 返回Map<Object,Map<String,Object>> map = qr.query("select * form users",new KeyedHandler(1)); for(Map.Entry<Object,Map<String,Object>> m : map.entrySet()){ for(Map.Entry<String,Object> mm : m.getValue().entrySet()){ System.out.println(mm.getKey()+"\t"+mm.getValue()); } }
    • MapHandler:适合取1条记录。把当前记录的列名和列值放到一个Map中
    • MapListHandler:适合取多条记录。把每条记录封装到一个Map中,再把Map封装到List中
    • ScalarHandler:适合取单行单列数据
    • BeanListHandler(T.class)返回list集合
    • BeanHandler(T.class)返回一个对象,适合单行单列
  • 11.Java连接Mysql的一些问题
  Class.forName("com.mysql.cj.jdbc.Driver");
      • 加上useSSL=true或false

con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test?useSSL=true", "root", "123456");
      • 加上serverTimezone=GMT

con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test?useSSL=true&serverTimezone=GMT", "root", "123456");

14mysql事务、数据库连接池、Tomcat的更多相关文章

  1. 事务&数据库连接池&DBUtils

    事务的特性 原子性 指的是 事务中包含的逻辑,不可分割. 一致性 指的是 事务执行前后.数据完整性 隔离性 指的是 事务在执行期间不应该受到其他事务的影响 持久性 指的是 事务执行成功,那么数据应该持 ...

  2. Tomcat7 新的数据库连接池Tomcat jdbc pool介绍和配置

    Tomcat 在 7.0 以前的版本都是使用commons-dbcp做为连接池的实现,但是 dbcp存在一些问题: (1)dbcp 是单线程的,为了保证线程安全会锁整个连接池 (2)dbcp 性能不佳 ...

  3. 数据库连接池在Tomcat中的几种配置方法

    数据库连接是一种关键的有限的昂贵的资源,这在多用户网页应用程序中体现的尤为突出.对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标,数据库连接池正是针对这个问题提出的. ...

  4. .数据库连接池技术:DBCP和C3P0

    数据库连接池技术:DBCP和C3P0 1.什么是数据库连接池 已知的方法是需要访问数据库的时候进行一次数据库的连接,对数据库操作完之后再释放这个连接,通常这样业务是缺点很明显的: 用户每次请求都需要向 ...

  5. JDBC学习笔记(8)——数据库连接池(dbcp&C3P0)

    JDBC数据库连接池的必要性 一.在使用开发基于数据库的web程序时,传统的模式基本是按一下步骤: 1)在主程序(如servlet/beans)中建立数据库连接 2)进行sql操作 3)断开数据库连接 ...

  6. MySql数据库连接池

    1.传统链接(如下为示意图) 注意: (1).传统方式找DriverManager要连接,数目是有限的. (2).传统方式的close(),并没有将Connection重用,只是切断应用程序和数据库的 ...

  7. 【转】JDBC学习笔记(8)——数据库连接池(dbcp&C3P0)

    转自:http://www.cnblogs.com/ysw-go/ JDBC数据库连接池的必要性 一.在使用开发基于数据库的web程序时,传统的模式基本是按一下步骤: 1)在主程序(如servlet/ ...

  8. 13-事务&数据库连接池&DBUtiles

    事务&数据库连接池&DBUtils 事务 Transaction  其实指的一组操作,里面包含许多个单一的逻辑.只要有一个逻辑没有执行成功,那么都算失败. 所有的数据都回归到最初的状态 ...

  9. day13_Mysql事务与数据库连接池学习笔记

    一.Mysql事务 事务: 事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部不成功(数据回滚).  例如:A给B转帐,对应于如下两条sql语句 : update account ...

随机推荐

  1. JFreeChart基础(1) (转自 JSP开发技术大全)

    JFreeChart基础(1) (转自 JSP开发技术大全) JFreeChart是一个Java开源项目,是一款优秀的Java图表生成插件,它提供了在Java Application.Servlet和 ...

  2. Codeforces Round #267 (Div. 2) C. George and Job(DP)补题

    Codeforces Round #267 (Div. 2) C. George and Job题目链接请点击~ The new ITone 6 has been released recently ...

  3. 【POI2007】【Bzoj 1103】大都市meg

    http://www.lydsy.com/JudgeOnline/problem.php?id=1103 在线查询某点到根节点的点权和,参考DFS序&欧拉序列,用树状数组维护即可O(nlogn ...

  4. 手机访问PC网站自动跳转到手机网站代码

    方法一: <script type="text/javascript"> try { var urlhash = window.location.hash; if (! ...

  5. 个人作品:EasyPicker(轻取)简洁而又实用的文件收取Web应用

    EasyPicker简洁实用且方便的在线文件收取Web应用  小弟我作为班上的学委,有一个伟大的职责,收发各科作业(尤其是专业课的上机课),上机==写报告,此时就产生了实验报告这个玩意儿,一个班少则4 ...

  6. Beyond Compare 激活解决办法

    问题: 当你使用过一段时间后会提示有问题,需要激活或者什么. 解决办法: 找到这个路径并删除其下Beyond Compare 3文件夹即可正常使用. C:\Users\******\AppData\R ...

  7. ADSI和其他内容

    ADSI (Active Directory Services Interface)是Microsoft推出的一项技术,它统一了许多底层服务的编程接口,程序员可以使用一致的对象技术来访问这些底层服务. ...

  8. [洛谷3930]SAC E#1 - 一道大水题 Knight

    Description 他们经常在一起玩一个游戏,不,不是星际争霸,是国际象棋.毒奶色觉得F91是一只鸡.他在一个n×n的棋盘上用黑色的城堡(车).骑士(马).主教(象).皇后(副).国王(帅).士兵 ...

  9. TCP/IP与Http与socket的关系

    1 理清概念: TCP/IP是一个大的协议族(只不过TCP和IP是super star所以就这么命名了),它包括了: 应用层协议:FTP.HTTP.TELNET.SMTP.DNS(协议): 传输层协议 ...

  10. c++类的内存布局

    问题: 考察了reinterpret_cast和static_cast的区别.顺道发现了一个可以查看c++内存布局的工具(在VS中). 结果: 前两个输出的地址形同,后一个不同. class A{in ...