先说一下情况,我电脑装的mysql默认配置的,
系统:windows 7
mysql版本:Server version: 5.5.28 MySQL Community Server (GPL)
jdbc:mysql-connector-java-5.1.22-bin.jar公司电脑,配置应该被改过,我看了看my.cnf也没发下啥特别的设置..
系统:linux
mysql版本:5.1.58
jdbc:不知道test1表很简单,只有一个字段id int
然后是下面的代码public static void main(String[] args) throws Exception {
try {
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager
.getConnection("jdbc:mysql://localhost/wazhu?user=root&password=root");
long begin = System.currentTimeMillis();
connection.setAutoCommit(false);
PreparedStatement pst = connection
.prepareStatement("insert into test1 values(?)");
for (int i = 0; i < 10000; i++) {
if (i == 5)
pst.setInt(1, i);
else
pst.setString(1, "aaaa");
pst.addBatch();
}
pst.executeBatch();
connection.commit();
System.out.println("cost:" + (System.currentTimeMillis() - begin));
} catch (Exception e) {
e.printStackTrace();
}
}
有2个问题,
1.这个代码在我电脑上执行会抛出异常,因为我设置pst.setString(1, "aaaa");,而id是int型的,这个我能想通,但是在公司电脑上不会报错,成功把所有值插入,只是在应该是5的那个位置值是0.
2.我自己的电脑必须设置connection.setAutoCommit(false);,这样批量提交才会很快执行,否则都是一条一条提交的,非常慢,但是公司电脑可以不要这句,也不需要connection.commit();,一样的能够批量提交.我也查看了variables,autocommit都是on我想问,我要怎么在mysql设置才能做到跟公司里一样的效果?
系统:windows 7
mysql版本:Server version: 5.5.28 MySQL Community Server (GPL)
jdbc:mysql-connector-java-5.1.22-bin.jar公司电脑,配置应该被改过,我看了看my.cnf也没发下啥特别的设置..
系统:linux
mysql版本:5.1.58
jdbc:不知道test1表很简单,只有一个字段id int
然后是下面的代码public static void main(String[] args) throws Exception {
try {
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager
.getConnection("jdbc:mysql://localhost/wazhu?user=root&password=root");
long begin = System.currentTimeMillis();
connection.setAutoCommit(false);
PreparedStatement pst = connection
.prepareStatement("insert into test1 values(?)");
for (int i = 0; i < 10000; i++) {
if (i == 5)
pst.setInt(1, i);
else
pst.setString(1, "aaaa");
pst.addBatch();
}
pst.executeBatch();
connection.commit();
System.out.println("cost:" + (System.currentTimeMillis() - begin));
} catch (Exception e) {
e.printStackTrace();
}
}
有2个问题,
1.这个代码在我电脑上执行会抛出异常,因为我设置pst.setString(1, "aaaa");,而id是int型的,这个我能想通,但是在公司电脑上不会报错,成功把所有值插入,只是在应该是5的那个位置值是0.
2.我自己的电脑必须设置connection.setAutoCommit(false);,这样批量提交才会很快执行,否则都是一条一条提交的,非常慢,但是公司电脑可以不要这句,也不需要connection.commit();,一样的能够批量提交.我也查看了variables,autocommit都是on我想问,我要怎么在mysql设置才能做到跟公司里一样的效果?
解决方案 »
- struts2.3.8的类型转换
- 帮忙把这个sql改hql
- java的字符串如何转化为对象名
- 一个技术积极讨论专区
- acei 如何拦截带参数的URL呢 在线等待。
- 各位老大, 如何修改word 修订里的更改用户名字?(紧急)
- 谁能给我介绍几本关于spring和hebernate的好书,谢谢!
- weblogic中默认的web应用程序位置是在C:\bea\user_projects\mydomain\applications\DefaultWebApp下,请问如何改动这个位置到我指定的地
- 看过-<JBuilder7&Weblogic7整和开发培训手册>高手请进!
- 使用Rmi出现的问题
- servletFilter中的dofilter方法的原理
- bootstrap chm
[mysqld]
init_connect='SET autocommit=0' //在mysqld里面加上这些内容
但是公司的电脑我还是用root登录的,而且我看了它配置里面也没有这个设置然后我又试了连上数据库后执行一次Statement st = connection.createStatement();
st.execute("SET autocommit=0");
st.close();执行速度是很快了,问题是执行完pst.executeBatch();
数据库里面没数据,也就是说还是要显示的调connection.commit
还有第一个问题不知道原因...等搞定了一起结贴...
好像是跟sql_mode有关系,我把它改成""了,自己手动在数据库里插数据就算类型错了都不会报错,但是用jdbc还是会抛异常...
user=root&password=root&jdbcCompliantTruncation=false
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4096)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4028)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2490)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2651)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2734)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155)
at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1379)
at wazhutest.TestSql.main(TestSql.java:23)就是一个很简单的插入数据更表的列不匹配的异常...
但是公司的就不会异常,会插一个0进去我把sql_mode设成""了,现在
我在mysql console用insert into test1 values('aaaa')都不会报错(test1只有一个列id int),会插个0进去,只是有个警告,但是jdbc还是会异常,公司的数据库是直接插个0进去
ANSI模式:宽松模式,对插入数据进行校验,如果不符合定义类型或长度,对数据类型调整或截断保存,报warning警告。
TRADITIONAL模式:严格模式,当向mysql数据库插入数据时,进行数据的严格校验,保证错误数据不能插入,报error错误。用于事物时,会进行事物的回滚。
STRICT_TRANS_TABLES模式:严格模式,进行数据的严格校验,错误数据不能插入,报error错误。 http://technoboy.iteye.com/blog/1004905
用楼主的代码加 mysql-connector-java-3.0.10.jar 能正确执行,换用5.0不行要加我上面说的参数出错,加了可以正确执行,那个参数是3.1以上的版本才有
结贴!谢谢各位mysql小白上不起呐