JDBC对事务的支持

Connection的setAutoCommit方法用于设置是否开启事务自动提交

若设置为true,则每次执行sql语句后,默认提交一次事务

若设置为false,则需手动commit事务,或遇到问题事务自动回滚

package com.company;

import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Properties;

/**
 * @Author: David.Xiao
 * @Date: 2018/10/30 19:24
 * @Description:
 */
public class TransactionTest {
    private static String driver;
    private static String url;
    private static String user;
    private static String password;
    private static Connection conn;


    public void initParams()
    {
        String propPath = "resources/mysql.properties";
        Properties prop = new Properties();
        try {
            prop.load(new FileInputStream(propPath));
        } catch (IOException e) {
            e.printStackTrace();
        }
        driver = prop.getProperty("driver");
        url = prop.getProperty("url");
        user = prop.getProperty("user");
        password = prop.getProperty("password");
        try {
            Class.forName(driver);
            conn = DriverManager.getConnection(url,user,password);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public void insertTransc()
    {
        String[] jdbc_names = {"sunlingzhi","wangming","luyuchen"};
        String[] jdbc_descs = {"1111","2222"};
        try {
            //若设置为true,则前两次成功插入数据到数据库;若设置为false,则一条也插入不进去
            conn.setAutoCommit(true);
            String sql = "insert into jdbc_test values (null ,?,?);";
            PreparedStatement preparedStatement = conn.prepareStatement(sql);
            for (int i=0;i<jdbc_names.length;i++) {
                preparedStatement.setString(1,jdbc_names[i]);
                preparedStatement.setString(2,jdbc_descs[i]);
                preparedStatement.executeUpdate();
            }
            conn.commit();
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }

    public static void main(String[] args) {
        TransactionTest transactionTest = new TransactionTest();
        transactionTest.initParams();
        transactionTest.insertTransc();
    }
}

猜你喜欢

转载自blog.csdn.net/qq_22339269/article/details/83548113