数据库
首页 > 数据库> > Caused by: java.sql.SQLException: Can‘t call commit when autocommit=true 踩坑

Caused by: java.sql.SQLException: Can‘t call commit when autocommit=true 踩坑

作者:互联网

在使用spark将hive中的数据导出到Mysql的时候遇到这个一个错误

Caused by: java.sql.SQLException: Can't call commit when autocommit=true
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:934)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:931)
        at com.mysql.jdbc.ConnectionImpl.commit(ConnectionImpl.java:1646)
        at com.alibaba.druid.pool.DruidPooledConnection.commit(DruidPooledConnection.java:756)
        at com.syswin.d_toon_user_info_new$$anonfun$main$1.apply(xxxx.scala:107)
        at com.syswin.d_toon_user_info_new$$anonfun$main$1.apply(xxxxx.scala:56)
        at org.apache.spark.rdd.RDD$$anonfun$foreachPartition$1$$anonfun$apply$29.apply(RDD.scala:928)
        at org.apache.spark.rdd.RDD$$anonfun$foreachPartition$1$$anonfun$apply$29.apply(RDD.scala:928)
        at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:2071)
        at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:2071)
        at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:87)
        at org.apache.spark.scheduler.Task.run(Task.scala:109)
        at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:344)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)

这个错误的大概意思就是当自动属性值为true是无法call commit。
如果不在代码中指定,conn.setAutoCommit()的值默认为true,这就意味着当执行DDL操作时候都会自动提交到数据库,无法回滚事务;当指定conn.setAutoCommit()为false时,意味着只有程序调用connection.commit()的时候才会将先前执行的语句一起提交到数据库,这样就实现了数据库的事务。
两者的主要区别就是当参数为true时sql命令的提交由驱动程序负责,当参数为false时sql命令的提交由由应用程序负责,程序必须调用commit或者rollback方法。
所以解决这个问题的方法就是将自动提交改成手动提交即可,也就是令autocommit=false。

标签:autocommit,anonfun,java,scala,Caused,apache,apply,spark
来源: https://blog.csdn.net/qq_40105563/article/details/113257241