mysql JDBC bug

环境:
system: xp sp2

JDK version: 1.5

mysql version:mysql 5.0

jdbc driver :mysql-connector-java-5.0.4-bin.jar

dbunit seed file:

 

<?xml version='1.0' encoding='UTF-8'?>
<dataset>
 
<T_STUDENT STD_ID='1' STD_NAME='handle' STD_SEX='M' />
 
<T_STUDENT STD_ID='2' STD_NAME='zwx' STD_SEX='M' />
 
<T_STUDENT STD_ID='3' STD_NAME='ana' STD_SEX='F' />
 
<T_STUDENT STD_ID='4' STD_NAME='rock' STD_SEX='M' />
</dataset>

 

test class:

package com.handle.dbunit;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;

import org.dbunit.DatabaseTestCase;
import org.dbunit.database.DatabaseConnection;
import org.dbunit.database.IDatabaseConnection;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.xml.FlatXmlDataSet;

public class DbUnitTest extends DatabaseTestCase {

    @Override
    
protected IDatabaseConnection getConnection() throws Exception {
        Class driverClass 
= Class.forName("com.mysql.jdbc.Driver");

        Connection jdbcConnection 
= DriverManager.getConnection(

        
"jdbc:mysql://127.0.0.1/test""root""iamallgood");
        assertNotNull(jdbcConnection);
        
return new DatabaseConnection(jdbcConnection);

    }


    @Override
    
protected IDataSet getDataSet() throws Exception {
        InputStream ins
=new FileInputStream(new File("dataSet_pre.xml"));
        assertNotNull(ins);
        
return new FlatXmlDataSet(ins);
    }

    
    
public void testAdd(){
        fail();
    }


}

 

运行以上代码,mysql一直会报以下错误:

 

java.sql.SQLException: Incorrect arguments to mysql_stmt_execute
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:
946)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:
2870)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:
1573)
    at com.mysql.jdbc.ServerPreparedStatement.serverExecute(ServerPreparedStatement.java:
1169)
    at com.mysql.jdbc.ServerPreparedStatement.executeInternal(ServerPreparedStatement.java:
693)
    at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:
794)
    at org.dbunit.database.statement.SimplePreparedStatement.addBatch(SimplePreparedStatement.java:
67)
    at org.dbunit.database.statement.AutomaticPreparedBatchStatement.addBatch(AutomaticPreparedBatchStatement.java:
57)
    at org.dbunit.operation.AbstractBatchOperation.execute(AbstractBatchOperation.java:
187)
    at org.dbunit.operation.CompositeOperation.execute(CompositeOperation.java:
67)
    at org.dbunit.AbstractDatabaseTester.executeOperation(AbstractDatabaseTester.java:
132)
    at org.dbunit.AbstractDatabaseTester.onSetup(AbstractDatabaseTester.java:
60)
    at org.dbunit.DatabaseTestCase.setUp(DatabaseTestCase.java:
120)
    at junit.framework.TestCase.runBare(TestCase.java:
128)
    at junit.framework.TestResult$
1.protect(TestResult.java:110)
    at junit.framework.TestResult.runProtected(TestResult.java:
128)
    at junit.framework.TestResult.run(TestResult.java:
113)
    at junit.framework.TestCase.run(TestCase.java:
120)
    at junit.framework.TestSuite.runTest(TestSuite.java:
228)
    at junit.framework.TestSuite.run(TestSuite.java:
223)
    at org.junit.internal.runners.OldTestClassRunner.run(OldTestClassRunner.java:
35)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:
38)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:
38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:
460)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:
673)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:
386)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:
196)

这个是mysql jdbc驱动的一个bug,需要在jdbc连接的URL中加上"?useServerPrepStmts=false",将java 中数据库连接字符串修改为:如下所示,问题解决.

    protected IDatabaseConnection getConnection() throws Exception {
        Class driverClass 
= Class.forName("com.mysql.jdbc.Driver");

        Connection jdbcConnection 
= DriverManager.getConnection(

        
"jdbc:mysql://127.0.0.1/test?useServerPrepStmts=false""root""iamallgood");
        assertNotNull(jdbcConnection);
        
return new DatabaseConnection(jdbcConnection);

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值