java - 如何修复“java.sql.SQLException:autocommit=true 时无法调用提交”
问题描述
我正在研究 java 和 mysql,但无法修复错误。当我将新农夫插入餐桌时,我正面临这些错误......
java.sql.SQLException:当 autocommit=true 时无法调用 commit
错误如下
java.sql.SQLException:当 autocommit=true 时无法调用 commit
在 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:869)
在 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:865)
在 com.mysql.jdbc.ConnectionImpl.commit(ConnectionImpl.java:1537 )
在 client.Main.addonething(Main.java:784) 在 client.Main.parse_commands(Main.java:123) 在 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(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 时,无法调用回滚在 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) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:898) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:887) at com.mysql.jdbc.SQLError .createSQLException(SQLError.java:861) 在 com.mysql.jdbc.ConnectionImpl.rollback(ConnectionImpl.java:4560) 在 client.Main.addonething(Main.java:795) 在 client.Main.parse_commands(Main.java: 123) 在client.Main.main_loop(Main.java:202) 在client.Main.main(Main.java:239)回滚(ConnectionImpl.java:4560) 在client.Main.addonething(Main.java:795) 在client.Main.parse_commands(Main.java:123) 在client.Main.main_loop(Main.java:202) 在客户端。 Main.main(Main.java:239)回滚(ConnectionImpl.java:4560) 在client.Main.addonething(Main.java:795) 在client.Main.parse_commands(Main.java:123) 在client.Main.main_loop(Main.java:202) 在客户端。 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;
}
解决方案
您可以使用以下代码禁用自动提交:
//Note : This will implicitly commit the active transaction and create a new one
connection.setAutoCommit(false);
现在一组语句(事务)将被提交:
connection.commit();
推荐阅读
- cmake - 有条件地运行 CMake 的 CHECK_TYPE_SIZE
- python - pyspark 从现有列的值创建多个列
- c - c语言C:/mingw/mingw64/x86_64-w64-mingw32/include/wingdi.h:1706:5:错误:未知类型名称'DWORD'
- unit-testing - IntelliJ Idea 显示两次 testng.xml 测试
- python - Flask 在 python JuptorLab 中不断崩溃
- amazon-web-services - 从部署到同一区域的 EKS 的应用程序的 ssl 连接到 RDS
- amazon-web-services - 为什么 AWS 的 Application Load Balancer 在使用 HTTPS 时需要自定义域?
- linux - LFTP 重新下载文件(如果已移动)
- javascript - 在 nodejs/javascript 中平滑图表中的所有数据点
- jquery - jquery .load() 带来的数据比我要求的要多