事务与连接池
来源:互联网 发布:dts音乐播放器for mac 编辑:程序博客网 时间:2024/06/08 04:32
1. 事务
介绍:
事务就是一个事情,组成这个事情可能有多个单元,要求这些单元,要么全都成功,要么全都不成功。在开发中,有事务的存在,可以保证数据完整性。
mysql下怎样操作
方式1: start transaction 开启事务 rollback 事务回滚 commit 事务提交方式2: show variables like '%commit%'; 可以查看当前autocommit值 在mysql数据库中它的默认值是"on"代表自动事务. 自动事务的意义就是:执行任意一条sql语句都会自动提交事务. 测试:将autocommit的值设置为off 1.set autocommit=off 关闭自动事务。 2.必须手动commit才可以将事务提交。 注意:mysql默认autocommit=on oracle默认的 autocommit=off;
jdbc下怎样操作
java.sql.Connection接口中有几个方法是用于可以操作事务 1.setAutocommit(boolean flag); 如果flag=false;它就相当于start transaction; 2.rollBack() 事务回滚。 3.commit() 事务提交
关于JdbcUtils中使用ThreadLocal
介绍
使用的目的是确保使用同一个 Connection,保证事务的原子性,同生共死
使用
1.声明一个ThreadLocal private static final ThreadLocal<Connection> tl = new ThreadLocal<Connection>();2.在getConnection()方法中操作 Connection con = tl.get(); 直接从ThreadLocal中获取,第一次返回的是null. if (con == null) { // 2.获取连接 con = DriverManager.getConnection(URL, USERNAME, PASSWORD); tl.set(con); //将con装入到ThreadLocal中。 }
丢失更新及锁
丢失更新问题介绍: 多个事务对统一天记录进行了操作,后提交的事务将先提交的事务覆盖了。解决方案: 1. 悲观锁(利用数据库内部锁机制,对当前操作的数据条进行事务锁定) 共享锁: Select * from table lock in share mode (读锁,共享锁) 排它锁: Select * from table for update(写锁、排它锁) update语句默认添加排它锁 2. 乐观锁(假设丢失更新不会发生) -----------------------采用在程序中添加版本字段解决对视更新问题 Create table product ( Id int , Name varchar(20), Upadatetime timestamp ); Insert into product values (1,”冰箱”,null) update product set name='洗衣机' where id = 1; 解决丢失更新: 在数据表添加版本字段,每次修改记录后,版本字段改变, 如果读取到的版本字段与修改时的版本字段不一致,说明别人修改了数据
连接池(源码位置day18_2)
自定义连接池
介绍: 就是创建一个容器,用于装入多个Connection对象,在使用连接对象时, 从容器中获取一个Connection,使用完成后,在将这个Connection重新 装入到容器中。这个容器就是连接池。(DataSource)也叫做数据源. 功能: 可以通过连接池获取连接对象.优点: 节省创建连接与释放连接 性能消耗 ---- 连接池中连接起到复用的作用 ,提高程序性能使用: 1.一个MyDataSource类,在这个类中创建一个LinkedList<Connection> ll 2.造方法中初始化List集合,并向其中装入5个Connection对象。 3.创建一个public Connection getConnection();从List集合中获取一个连接对象返回. 4. public void readd(Connection) 这个方法是将使用完成后的Connection对象重新 装入到List集合中. dbcp连接池
Dbcp连接池
介绍:dbcp是apache的一个开源连接池。要想使用DBCP连接池,要下载jar包。使用: 导入时要导入两个commons-dbcp-1.4.jar,commons-pool-1.5.6.jar 代码中使用: public static void main(String[] args) throws Exception{ // BasicDataSource bds = new BasicDataSource(); // bds.setDriverClassName("com.mysql.jdbc.Driver"); // bds.setUrl("jdbc:mysql:///uu"); // bds.setUsername("root"); // bds.setPassword(""); Properties properties = new Properties(); InputStream is = DbcpPool.class.getResourceAsStream("/jdbc.properties"); properties.load(is); DataSource ds = BasicDataSourceFactory.createDataSource(properties); Connection conn = ds.getConnection(); search(conn); }
C3p0连接池
介绍:C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。 目前使用它的开源项目有Hibernate,Spring等。c3p0与dbcp区别: dbcp没有自动回收空闲连接的功能 c3p0有自动回收空闲连接功能使用: ComboPooledDataSource cpds = new ComboPooledDataSource();// cpds.setDriverClass("com.mysql.jdbc.Driver");// cpds.setJdbcUrl("jdbc:mysql:///uu");// cpds.setUser("root");// cpds.setPassword(""); Connection conn = cpds.getConnection(); search(conn);
tomcat 内部连接池
介绍:tomcat内置连接池使用的是dbcp。tomcat怎样管理连接池?(配置) 要想将一个dbcp连接池让 tomcat管理,只需要创建一个context.xml配置文件, 在配置文件中配置相关信息, <Context> <Resource name="jdbc/EmployeeDB" auth="Container" type="javax.sql.DataSource" username="root" password="abc" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql:///uu" maxActive="8" maxIdle="4"/> </Context>Context.xml 文件位置1. 在tomcat/conf/context.xml 这时这个连接池是给整个服务器使用的。2. 在tomcat/conf/Catalina/localhost 这时这个连接池只给localhost虚拟主机使用。3. 将context.xml文件放置在web应用的META-INF下4. 注意:如果是全局设置,那么我们需要将数据库驱动放置在tomcat/lib目录下 内部连接池的使用: 因为是Tomcat中的连接池,so,肯定是在web 中的使用,使用时可以在Servlet中,具体代码如下 Context context = new InitialContext(); Context envCtx = (Context) context.lookup("java:comp/env"); // 固定路径 DataSource ds = (DataSource) envCtx.lookup("jdbc/EmployeeDB"); Connection conn = ds.getConnection(); Statement st = conn.createStatement(); ResultSet rs = st.executeQuery("select * from user"); while (rs.next()){ System.out.println( rs.getString("name")+ " " + rs.getInt("sex")+" " + rs.getInt("age") ); }
1 0
- 事务与连接池
- 事务与连接池
- 事务与连接池
- java事务与连接池
- JavaEE(事务与连接池)
- 每日一结,事务与连接池
- 葵花宝典 二十三 事务与连接池
- MySQL中的事务与连接池
- 事务和连接池
- JavaWeb系列之十三(jdbc事务与连接池)
- 关于连接与事务的处理
- 事务和连接池总结
- 事务和连接池简介
- 连接池(事务和多线程问题)
- 1.连接池、密码安全、事务
- 黑马程序员 事务和连接池
- JDBC之事务、连接池、dbutils
- Redis连接池、事务和管道
- 20170226#cs231n#4.Backpropagation反向传播
- explicit关键字
- Falcon(三)——Falcon数据导入和导出
- 125. Valid Palindrome 的OJ代码
- 关于Manjaro Linux更换中国源的问题
- 事务与连接池
- iOS
- Hadoop浅解Combiner
- MySQL之约束
- PAT甲级1016. Phone Bills (25)
- 论文笔记《Going deeper with convolutions》1409
- ZooKeeper源码学习笔记(1)--client端解析
- 喷水装置(一)【贪心】
- Go基础-基本程序结构