JDBC问题 statement.addBatch()抛出异常

问题描述

源代码:try{Connectioncon=DriverManager.getConnection("jdbc:odbc:db1","root","");System.out.println("SuccesssLinkedDataBase");Statementstm1=con.createStatement();stm1.addBatch("insertintopetvalues('S1','Zl','dog','f',null,null)");stm1.addBatch("updatepetsetpet.name='S0'wherepet.name='S1'");stm1.executeBatch();stm1.executeBatch();}catch(Exceptionex){ex.printStackTrace();}sun.jdbc.odbc.JdbcOdbcBatchUpdateException:[MySQL][ODBC5.1Driver][mysqld-5.1.40-community]YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMySQLserverversionfortherightsyntaxtousenear'updatepetsetpet.name='S0'wherepet.name='S1''atline2atsun.jdbc.odbc.JdbcOdbcStatement.executeBatchUpdate(UnknownSource)atsun.jdbc.odbc.JdbcOdbcStatement.executeBatch(UnknownSource)atcn.test.ExecuteBatchTest.main(ExecuteBatchTest.java:46)找了好久还是没答案。是数据库驱动问题?数据库?头疼啊。。。。。。。

解决方案

解决方案二:
你把这句stm1.addBatch("updatepetsetpet.name='S0'wherepet.name='S1'");先去掉执行一次看看能不能执行
解决方案三:
YouhaveanerrorinyourSQLsyntax你的SQL语句有错误updatepetsetpet.name='S0'wherepet.name='S1'去掉pet.再看看或者在pet后面加个别名再用别名.name
解决方案四:
SQL语句都没问题就是要去掉一个stm1.addBatch("****");就是只有在加一个的情况下才能运行你们以前用过Statement.addBatch()方法没?用的是什么数据库?
解决方案五:
jdk1.5以后的版本才支持批处理,检查下你的jdk版本。
解决方案六:
stm1.executeBatch();stm1.executeBatch();为什么要执行两次呢????
解决方案七:
发帖的时候写错的不影响今天换了个SQlServer2000可以用batch方法了(说明应该是驱动问题)虽然命令可以执行也加进数据库了但还是有异常:SQLAttempttoproduceaResultSetfromexecuteBatch且executeBatch()方法没有返回结果另外就是用PreparedStatement的pstmt.setDate(9,null);方法抛出异常:没有执行可选特性网上找了有的说是驱动问题换驱动桥接方式
解决方案八:
不懂
解决方案九:
batch就是批处理,你这叫什么批处理?我给你写个例子你看看:publicclassTest{publicstaticfinalintBATCH_SIZE=100;publicstaticvoidmain(String[]args)throwsSQLException{Stringsql="updatesome_tablesetcolumn1=?,column2=?wherecondition=?";Connectionconn=null;PreparedStatementps=null;intcount=0;conn.setAutoCommit(false);ps=conn.prepareStatement(sql);for(inti=0;i<1200;i++){ps.setInt(1,i);ps.setLong(2,i*i);ps.setInt(3,i);ps.addBatch();count++;if(count==BATCH_SIZE){ps.executeBatch();count=0;}}if(count>0){ps.executeBatch();}conn.commit();}}

当时这个需求需要根据计算结果更新8000多条信息,不用batch的话执行了3分钟,用了batch之后只需要18秒
解决方案十:
现在一次性加几百条都没问题但还是有异常抛出哦
解决方案十一:
stm1.executeBatch();为什么要执行2次?
解决方案十二:
怎么没见Class.format("sun.jdbc.odbc.JdbcOdbcDriver");?

时间: 2025-01-31 01:56:47

JDBC问题 statement.addBatch()抛出异常的相关文章

Java的JDBC中Statement与CallableStatement对象实例_java

JDBC Statement对象实例以下是利用以下三种查询以及打开和关闭说明的例子: boolean execute(String SQL) : 返回一个布尔值true,如果ResultSet对象可以被检索,否则返回false.使用这个方法来执行SQL DDL语句,或当需要使用真正的动态SQL. int executeUpdate(String SQL) : 返回受影响的SQL语句执行的行数.使用此方法来执行,而希望得到一些受影响的行的SQL语句 - 例如,INSERT,UPDATE或DELET

详解Java的JDBC中Statement与PreparedStatement对象_java

一旦获得一个连接,我们可以与数据库进行交互.在JDBC Statement, CallableStatement 和 PreparedStatement 接口定义的方法和属性,使可以发送SQL或PL/SQL命令和从数据库接收数据. 它们还定义方法,帮助Java和数据库使用SQL数据类型之间转换数据的差异. 下表提供了每个接口的用途概要,了解决定使用哪个接口 Statement 对象: 创建Statement对象在可以使用Statement对象执行SQL语句,需要使用Connection对象的cr

jdbc批处理的addBatch问题

问题描述 jdbc批处理的addBatch问题 preparedstatement = connection.prepareStatement(sql.toString()); for (int i = 0; i < list.size(); i++) { Map map = list.get(i); Set<Entry> entries = map.entrySet(); for (Entry entry : entries) { preparedstatement.setString

JDBC中Statement,PreparedStatement,CallableStatement三个方法的实例

public void ListStudents() throws SQLException{ int i, NoofColumns; String StNo, StFName, StLName; //初始化并加载JDBC-ODBC驱动程序 Class.forName("jdbc.odbc.JdbcOdbcDriver"); //创建连接对象 Connection Ex1Con = DriverManager.getConnection("jdbc:odbc:StudentD

JDBC 专题

digest: getFetchSize()方法不是获得记录数,而是获得每次抓取的记录数,默认是0,也就是说不限制.可以用setFetchSize()来设置,而getFetchSize()是用来读出那个设置值.设置为正整数之后,ResultSet每次抓取的最多纪录数就有了上限,而不是所有符合条件的记录.可以设置为100     DriverManager.getLoginTimeout():0jdbc Connection默认是autoCommit:trueStatement查询超时时间默认是0

oracle11g-关于jdbc预编译的问题

问题描述 关于jdbc预编译的问题 前面编好了insert 语句,没有问题, 但是map里面有string 有int 请问set的时候怎么写, 用object行吗, 如果我提前把数据都转成string 全都setString 行吗 运行后报错 ORA-01008 并非所有值都是绑定的, 求教 statement = connection.createStatement(); int batchSize = 0; for (int i = 0; i < list.size(); i++) { in

PostgreSQL jdbc batch insert

标签 PostgreSQL , jdbc , batch , addbatch , executebatch , insert 背景 如何快速的将数据导入数据库? 比如ETL程序,数据还原程序,数据初始化,数据同步等场景都会有这样的诉求. 从几个方面来分析 1. 统计信息 PostgreSQL会自动统计表的统计信息,包括柱状图等.会有一定的开销,所以在做批量导入时,可以先关闭表的autovacuum. 2. 索引 构造索引,会有一定的CPU和IO开销,影响导入速度,所以可以在数据导入后再建索引.

优化JDBC性能的三大技巧

开发一个注重性能的JDBC应用程序不是一件容易的事. 当你的代码运行很慢的时候JDBC驱动程序并不会抛出异常告诉你. 本系列的性能提示将为改善JDBC应用程序的性能介绍一些基本的指导原则,这其中的原则已经被许多现有的JDBC应用程序编译运行并验证过. 这些指导原则包括: 正确的使用数据库MetaData方法 只获取需要的数据 选用最佳性能的功能 管理连接和更新 以下这些一般性原则可以帮助你解决一些公共的JDBC系统的性能问题. 使用数据库Metadata方法 因为通过ResultSet对象生成的

请问 PreparedStatement .addBatch() 有数量限制吗?

问题描述 PreparedStatement statement = connection.prepareStatement("INSERT INTO TABLEX VALUES(?, ?)");//记录1statement.setInt(1, 1);statement.setString(2, "Cujo");statement.addBatch();//记录2statement.setInt(1, 2);statement.setString(2, "