java连接mysql数据库批量的一点研究

来源:互联网 发布:语音输入翻译软件 编辑:程序博客网 时间:2024/06/05 21:11
 
jdbc:mysql://10.21.38.37:20009/livedata?useUnicode=true&characterEncoding=utf-8&autoReconnect=true
jdbc:mysql://10.21.38.37:20009/livedata?useUnicode=true&characterEncoding=utf-8&autoReconnect=true


大家在配置jdbc的时候要注意一下这个的区别


如果是xml文件的配置,用&,如果是普通的配置文件,一定要用&,不要用&


否则后面的参数没用


StringTokenizer queryParams = new StringTokenizer(paramString, "&"); //$NON-NLS-1$


源码里面解析参数用的是&


还有最好加上这两个参数:rewriteBatchedStatements=true&allowMultiQueries=true


如果是用conn.prepareStatement("insert into test(id,hour,minute,date) values(?,?,?,?)") 创建PreparedStatement
在调用addBatch()方法后,如果一批数据大于3,则默认会一批sql发一次请求。
但有一种情况除外:调用了addBatch(sql)方法,这个sql是一个拼接好了的字符串,如"insert into test(id,hour,minute,date) values(1,2,3,4)"
如下面的源码,特别注意batchHasPlainStatements参数。在批处理的时候回判断这个参数,如果为true,则不会批量请求,会一条一条sql发到服务器。
PreparedStatement
public void addBatch(String sql) throws SQLException {
synchronized (checkClosed().getConnectionMutex()) {
this.batchHasPlainStatements = true;
super.addBatch(sql);
}
}
如果调用的是conn.createStatement(),此时返回的是StatementImpl,此时再调用 stmt.addBatch(sql);方法,之后再执行stmt.executeBatch();方法。
默认情况下,并不会批量请求,而是一条一条发送。注意如下源码:
boolean multiQueriesEnabled = locallyScopedConn.getAllowMultiQueries();
if (locallyScopedConn.versionMeetsMinimum(4, 1, 1) &&
(multiQueriesEnabled ||
(locallyScopedConn.getRewriteBatchedStatements() &&
nbrCommands > 4))) {
return executeBatchUsingMultiQueries(multiQueriesEnabled, nbrCommands, individualStatementTimeout);
}
这里需要配置两个参数:rewriteBatchedStatements=true&allowMultiQueries=true
这两个参数默认为false。
0 0
原创粉丝点击