jdbc-连接池--MySQL版本太高,连接池失败-待解决

33 篇文章 0 订阅
3 篇文章 0 订阅
  1. 事务 :

    处理事务的两个动作: 提交:commit:  回滚:rollback: 

  2. 事务的ACID属性:
    1. 原子性(Atomicity):要么都执行,要么都不执行;
    2. 一致性(Consistency)
    3. 隔离性(Isolation):   并发执行的事务之间彼此相互独立、互不干扰;
    4. 持久性(Durability): 事务提交后,数据是永久性的、不可回滚; 

  3. 如何在代码中去处理事务:
    1.在JDBC中缺省情况下,事务是自动提交的,控制事务必须先设置事务为手动提交.
    connection对象.setAutoCommit(false);
    2.手动的提交事务.
        connection对象.commit();
    3.若出现异常必须回滚事务:
       不回滚事务,总余额依然是正确的. 若不回滚事务,不会释放数据库资源.
       connection对象.rollback();
    -----------------------------------------------------------------------------------
    1.在JDBC在事务是默认提交的,在执行一个DML/DDL操作的时候,就已经提交事务了.
    2.查询操作没有事务.
    3.以后,是正确的,但是数据库表中的数据不变----->事务没提交的问题.

  4. 批量操作(batch):可以采用Java的批量更新机制,允许多条语句一次性提交给数据库批量处理。JDBC的批量处理语句包括下面两个方法:
    addBatch(String): 添加需要批量处理的SQL语句或是参数;
    executeBatch():       执行批量处理语句;

    通常我们会遇到两种批量执行SQL语句的情况:
    多条SQL语句的批量处理; : Statement
    一个SQL语句的批量传参; : PreparedStatement

    在JDBC中,MySQL不支持批量操作.
    -------------------------------------------------------------------------
    Statement 批处理 : 一次性可以执行多条sql语句,需要编译多次。
    应用场景:系统初始化 (创建表,创建数据等)
    添加sql语句,st.addBatch(sql) 
    批量处理sql语句,int[] st.executeBatch()
    清除缓存: st.clearBatch();
    -------------------------------------------------------------------------
    PreparedStatement 批处理 : 执行一条sql语句,编译一次,执行sql语句的参数不同。
    应用场景:表数据初始化
    添加批量参数:ps.addBatch()  添加参数之前,需要ps.setXxx()
    执行批处理:int[] ps.executeBatch()
    清除缓存:ps.clearBatch();

    结论:
      MySQL服务器既不支持PreparedStatement的性能优化,也不支持JDBC中的批量操作.
      但是,在新的JDBC驱动中,我们可以通过设置参数来优化.
    url=jdbc:mysql://localhost:3306/jdbcdemo?rewriteBatchedStatements=true

  5. BLOB是可变的数据类型
    --------------------------------------------------------------------------------
         TINYBLOB                    255个字节
           BLOB                        65535字节
           MEDIUMBLOB       16M
           LONGBLOB              4G
    --------------------------------------------------------------------------------
    MySQL中的TEXT类型,和VARCHAR是一样的, 在Java代码中,都是作为String类型.
    --------------------------------------------------------------------------------
         TINYTEXT                    255个字节
           TEXT                        65535字节
           MEDIUMTEXT           16M
           LONGTEXT              4G

    BLOB 系列和 Text 系列都是可变长的.

  6.  获取自动生成的主键
    Statement:
    int executeUpdate(String sql,int autoGeneratedKeys):执行SQL:
             参数:autoGeneratedKeys,是否需要返回自动生成的主键.常量值:Statement.RETURN_GENERATED_KEYS
             ResultSet getGeneratedKeys():获取自动生成的主键
    PreparedStatement:
    PreparedStatement prepareStatement(String sql, int autoGeneratedKeys)  :创建PreparedStatement对象,并指定是否需要返回生成的主键. 参数的常量值:Statement.RETURN_GENERATED_KEYS

  7. 在Java中,连接池使用javax.sql.DataSource接口来表示连接池. DataSource仅仅只是一个接口,由第三方组织提供实现).
    常用的DataSource的实现:
      DBCP:  Spring推荐的
      C3P0:  Hibernate推荐的
      druid:   阿里
    1): 获取连接的方式不同
    2):释放资源时不同

  8.  DBCP连接池  DataSource ds= BasicDataSourceFactory.createDataSource(Properties);
    拷贝jar:
      commons-dbcp-1.3.jar      commons-pool-1.5.6.jar .
    查阅文档:commons-dbcp-1.3-src\doc\BasicDataSourceExample.java
    --------------------------------------
      应该把连接信息放到配置文件中去:  配置文件的名词可以任意.
      但是配置文件中的key,必须是BasicDataSource对象的属性(setXxx方法决定的属性);
    -----------------------------------------------------------------------------------
    dbcp.properties
    #连接字符串
    url=jdbc:mysql://localhost:3306/jdbcdemo
    #用户名
    username=root
    #密码
    password=admin
    #驱动的类路径
    driverClassName=com.mysql.jdbc.Driver
    #连接池启动时的初始值
    initialSize=5
    #连接池的最大值
    maxActive=50
    #连接池的最大空闲数
    maxIdle=20

  9. druid (德鲁伊);Java语言领域性能最好的
    拷贝jar包
    文档 : https://github.com/alibaba/druid/wiki
    类似于DBCP连接池.

  10. 德鲁伊失败,MySQL版本太高,转载:https://www.jianshu.com/p/582ae6d91154

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值