JDBC ConncetionFactory、Statement、事务提交模式和事务隔离级别和批量处理的应用

来源:互联网 发布:peid 0.94优化版 编辑:程序博客网 时间:2024/05/20 18:00
JDBC ConncetionFactory、Statement、事务提交模式和事务隔离级别和批量处理的应用

创建配置文件和ConncetionFactory
sqlite.driver=org.sqlite.JDBCsqlite.url=jdbc:sqlite:E:/SQLite3/StudentManageSystem.dbsqlite.user=sqlite.password=oracle.driver=oracle.jdbc.driver.OracleDriveroracle.url=jdbc:oracle:thin:@" + "host:port:databaseNameoracle.user=**oracle.password=**mysql.driver=com.mysql.jdbc.Drivermysql.url=jdbc:mysql://host:port:databaseNamemysql.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");//读取文件配置数据库URLUSER = properties.getProperty("sqlite.user");//读取文件配置数据库用户PASSWORD = properties.getProperty("sqlite.password");//读取文件配置数据库用户密码} catch (IOException e) {// TODO Auto-generated catch blocke.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的驱动,
插入数据成功后,再次运行显示错误,

应该是回滚失败。。。。。。



阅读全文
1 0
原创粉丝点击