JDBC ConncetionFactory、Statement、事务提交模式和事务隔离级别和批量处理的应用
2017-10-19 10:30
489 查看
JDBC ConncetionFactory、Statement、事务提交模式和事务隔离级别和批量处理的应用
创建配置文件和ConncetionFactory类
创建Test类,测试代码
我这里使用SQLite数据库,用的是SQLite数据库JDBC的驱动,
插入数据成功后,再次运行显示错误,
应该是回滚失败。。。。。。
创建配置文件和ConncetionFactory类
sqlite.driver=org.sqlite.JDBC sqlite.url=jdbc:sqlite:E:/SQLite3/StudentManageSystem.db sqlite.user= sqlite.password= oracle.driver=oracle.jdbc.driver.OracleDriver oracle.url=jdbc:oracle:thin:@" + "host:port:databaseName oracle.user=** oracle.password=** mysql.driver=com.mysql.jdbc.Driver mysql.url=jdbc:mysql://host:port:databaseName mysql.user=** mysql.password=**
package cjx913; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Properties; public class ConnectionFactory { private static String DRIVER; private static String URL; private static String USER; private static String PASSWORD; static{ Properties properties = new Properties(); InputStream is = ConnectionFactory.class.getResourceAsStream("jdbcinfo.properties"); try { properties.load(is);//加载配置文件 DRIVER = properties.getProperty("sqlite.driver");//读取文件配置数据库驱动 URL = properties.getProperty("sqlite.url");//读取文件配置数据库URL USER = properties.getProperty("sqlite.user");//读取文件配置数据库用户 PASSWORD = properties.getProperty("sqlite.password");//读取文件配置数据库用户密码 } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 提供getConnection()方法 * @return Connection */ public static Connection getConnection(){ Connection conn = null; try { Class.forName(DRIVER); conn = DriverManager.getConnection(URL); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } return conn; } }
创建Test类,测试代码
package cjx913; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; public class test { public static void main(String[] args) { insertData(); } private static void insertData() { //通过ConnectionFactory建立数据库连接 Connection conn = ConnectionFactory.getConnection(); //创建PreparedStatement,传输SQL语句或参数 PreparedStatement stmt = null; try { //设置事务手动提交模式 conn.setAutoCommit(false); //设置事务隔离级别 conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE); // stmt = conn.prepareStatement( "INSERT INTO Teacher(id,name) VALUES(?,?)"); for(int i=1;i<=1000;i++){ stmt.setInt(1, i); stmt.setString(2, "教师"+i); stmt.addBatch();//将参数传输到stmt缓存中 } stmt.executeBatch();//将所有参数传输到数据库批量处理 conn.commit();//提交事务 } catch (SQLException e) { e.printStackTrace(); try { conn.rollback();//回滚事务 } catch (SQLException e1) { e1.printStackTrace(); } }finally{ try { conn.close();//关闭连接 } catch (SQLException e) { e.printStackTrace(); } } } }
我这里使用SQLite数据库,用的是SQLite数据库JDBC的驱动,
插入数据成功后,再次运行显示错误,
应该是回滚失败。。。。。。
相关文章推荐
- 传智播客 JDBC基础之工厂模式的应用与事务分析
- SQL Server 中的事务与事务隔离级别以及如何理解脏读, 未提交读,不可重复读和幻读产生的过程和原因
- 关于分布式事务、两阶段提交、一阶段提交、Best Efforts 1PC模式和事务补偿机制的研究
- 在Java中应用设计模式 - Factory Method
- 单例模式在JDBC数据库连接操作里的应用
- JDBC高级应用 - DAO模式与JavaBean
- MySQL JDBC PrepareStatement基本的两种模式&客户端空间占用的源码分析
- 关于分布式事务、两阶段提交、一阶段提交、Best Efforts 1PC模式和事务补偿机制的研究
- java JDBC应用(一)——PraparedStatement对象
- SQL Server 中的事务与事务隔离级别以及如何理解脏读, 未提交读,不可重复读和幻读产生的过程和原因
- 关于分布式事务、两阶段提交、一阶段提交、Best Efforts 1PC模式和事务补偿机制的研究
- JavaScript 模式之工厂模式(Factory)应用介绍
- JDBC学习笔记——事务、存储过程以及批量处理
- 在 Java 中应用设计模式 - Factory Method
- JDBC03 利用JDBC实现事务提交与回滚【调用Connection中的方法实现事务管理】
- 关于分布式事务、两阶段提交、一阶段提交、Best Efforts 1PC模式和事务补偿机制的研究
- JDBC的事务控制和批量处理
- 关于分布式事务、两阶段提交、一阶段提交、Best Efforts 1PC模式和事务补偿机制的研究
- ThreadLocal模式下管理的Session会在事务提交后自动关闭
- 关于分布式事务、两阶段提交、一阶段提交、Best Efforts 1PC模式和事务补偿机制的研究