[英]JDBC batch with PreparedStatement not working in MySQL
规格: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的错误吗?
似乎您在每次迭代时都创建一个新的PreparedStatement ,因此executeBatch()
将仅应用于最后一个PreparedStatement
对象。
此外,使用PreparedStatement
可以避免SQL注入,并且当您使用?
时,它可以将值转义?
占位符系统。
您正在使用的addBatch()方法适用于可变参数:
void addBatch()引发SQLException
将一组参数添加到此PreparedStatement对象的命令批中。
,而不是尝试执行的原始查询(为此,您将使用addBatch(java.lang.String query)
void addBatch(String sql)抛出SQLException
将给定的SQL命令添加到此Statement对象的当前命令列表中。 可以通过调用executeBatch方法来批量执行此列表中的命令。
下面的示例应执行所需的操作:
String[][] data = { { "first", "data" }, { "second", "data" }, { "third", "data" } };
String sql = "insert into abc(col1,col2) values (?, ?)";// use placeholders
PreparedStatement pst = connection.prepareStatement(sql);// create a single statement
for (String[] row : data) {
// set parameters
pst.setString(1, row[0]);
pst.setString(2, row[1]);
pst.addBatch();// validate the set
}
int[] chkSql = pst.executeBatch(); // execute the batch of commands
//check if chkSql consists of 0..rollback else commit for > 0
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
对象。 如果您不想在运行时设置值,也不要使用预处理语句。
在这里看看这种查询,
并且, 这里准备了语句
我希望这可以帮助您了解何时使用什么
不了解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')"
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.