Как исправить «java.sql.SQLException: не могу вызвать commit, когда autocommit = true» - PullRequest
0 голосов
/ 07 июня 2019

Я работаю над Java и MySQL и не могу исправить ошибки. Я сталкиваюсь с этими ошибками, когда я добавляю нового фермера в таблицу ...

java.sql.SQLException: невозможно вызвать commit, когда autocommit = true

Ошибки ниже

java.sql.SQLException: невозможно вызвать commit, когда autocommit = true

at com.mysql.jdbc.SQLError.createSQLException (SQLError.java:869)
at com.mysql.jdbc.SQLError.createSQLException (SQLError.java:865)
at com.mysql.jdbc.ConnectionImpl.commit (ConnectionImpl.java:1537)
на client.Main.addonething (Main.java:784) at client.Main.parse_commands (Main.java:123) at client.Main.main_loop (Main.java:202) на client.Main.main (Main.java:239) com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: невозможно вызвать откат, когда autocommit = true at sun.reflect.NativeConstructorAccessorImpl.newInstance0 (собственный метод) at sun.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance (DelegatingConstructorAccessorImpl.java:45) в java.lang.reflect.Constructor.newInstance (Constructor.java:423) в com.mysql.jdbc.Util.handleNewInstance (Util.java:425) на com.mysql.jdbc.Util.getInstance (Util.java:408) в com.mysql.jdbc.SQLError.createSQLException (SQLError.java:919) на com.mysql.jdbc.SQLError.createSQLException (SQLError.java:898) в com.mysql.jdbc.SQLError.createSQLException (SQLError.java:887) в com.mysql.jdbc.SQLError.createSQLException (SQLError.java:861) на com.mysql.jdbc.ConnectionImpl.rollback (ConnectionImpl.java:4560) на client.Main.addonething (Main.java:795) at client.Main.parse_commands (Main.java:123) at client.Main.main_loop (Main.java:202) at client.Main.main (Main.java:239)

Это код подключения к базе данных

 public static void addonething(String query, DBConnection dbConnection){
        Statement myStmt;
        try {
            myStmt =  dbConnection.getConn().createStatement();
            int swichA = 0;
            int swichB = 0;
            myStmt.execute(query);

    System.out.println("To commit the data enter 1");
    Scanner in = new Scanner(System.in);
    swichB = in.nextInt();
    if(swichA != -1 && swichB == 1){
        System.out.println();
        dbConnection.getConn().commit();
    }
    else{
        System.out.println("it came hear3");
        dbConnection.getConn().rollback();
    }

} catch (SQLException e) {
    System.out.println("it came hear4");
    e.printStackTrace();
    try {
        dbConnection.getConn().rollback();
    } catch (SQLException e1) {
        System.out.println("it came hear5");
        e1.printStackTrace();
    }
}}

Ниже приведен метод вставки

public static String frQuery(String second_part){
    String data = get_data_from_commands(second_part);
    String[] tokens = data.split(",");
    String queryf = String.format("insert into farmers" + " 
            (Name, lastname, Address, zipcode, city, phones, mails)" + "values 
      ('%s','%s','%s','%s','%s','%s','%s')",tokens[0],tokens[1],tokens[2], 
       tokens[3],tokens[4],tokens[5], tokens[6]);

    return queryf;
}

1 Ответ

1 голос
/ 07 июня 2019

Вы можете отключить автоматическую фиксацию, используя этот код:

 //Note : This will implicitly commit the active transaction and create a new one
 connection.setAutoCommit(false);

Теперь набор выписок (транзакций) будет зафиксирован на:

connection.commit();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...