SPEC:MYSQL 5.7.16,JDK1.7,TOMCAT 8,mysql-connector-java-6.0.4.jar,WINDOWS 10
以下代码不会将批处理方法更新为db
Preparestatement pst = null;
String[] sqlx = {
"insert to abc('col1','col2')values('first', 'data')"
"insert to abc('col1','col2')values('second','data')"
"insert to abc('col1','col2')values('third', 'data')"
};
for(String sqIn : sqlx){
pst = <jdbcConn>.preparestatement(sqIn);
pst.addBatch();
}
int[] chkSql = pst.executeBatch();
//check if chkSql consists of 0..rollback else commit for > 0
在代码的调试模式下,chkSql总是有'1'..这是晕吗? 仅成功插入1行,未插入其他行。
这是MYSQLDB还是JAR ????
的错误答案 0 :(得分:2)
看起来您在每次迭代时都会创建一个新的PreparedStatement,因此string = "a[0]['c']"
只会应用于最后一个executeBatch()
对象。
此外,PreparedStatement
用于避免SQL注入,当您使用PreparedStatement
占位符系统时,它会处理值转义。
您使用的addBatch()方法适用于可变参数:
void addBatch() 抛出SQLException
向此PreparedStatement对象的批处理添加一组参数 命令。
,不是您尝试过的原始查询(为此,您可以使用addBatch(java.lang.String query)
void addBatch(String sql) 抛出SQLException
将给定的SQL命令添加到当前的命令列表中 声明对象。此列表中的命令可以批量执行 通过调用executeBatch方法。
以下示例应该执行您想要的操作:
?
答案 1 :(得分:1)
Statement stmt = null;
String[] sqlx = {
"insert into abc(col1,col2) values('first', 'data')",
"insert into abc(col1,col2) values('second','data')",
"insert into abc(col1,col2) values('third', 'data')"
};
for(String sqIn : sqlx){
stmt.addBatch(sqIn);
}
int[] chkSql = stmt.executeBatch();
尝试运行此代码。连接是您的Connection
对象。如果您不想在运行时设置值,也不要使用预准备语句。
查看此类查询here,
和准备好的陈述here
我希望这可以帮助您了解何时使用
答案 2 :(得分:0)
不知道JDBC / Java,但发布的INSERT
语句是完全错误的。你永远不应该引用列名,否则它将被视为字符串文字而不是列。它应该是
insert to abc(col1,col2)values('first', 'data')
与发布的代码一样,它应该看起来像
String[] sqlx = {
"insert into abc(col1,col2)values('first', 'data')",
"insert into abc(col1,col2)values('second','data')",
"insert into abc(col1,col2)values('third', 'data')"
};