gpt4 book ai didi

java - '@' 的转义字符——JDBC?

转载 作者:太空宇宙 更新时间:2023-11-03 10:34:45 24 4
gpt4 key购买 nike

我正在对 MySQL 表进行批量插入:

insert into table1 (field1, field2) values("aa@gmail.com", "f2 value"), ("cc@gmail.com", "another f2 here");

给值字符串中的字符“@”错误:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'insert into buyers (field1, field2) values ('aa@' at line 1 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at com.mysql.jdbc.Util.handleNewInstance(Util.java:425) at com.mysql.jdbc.Util.getInstance(Util.java:408) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:943) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3970) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3906) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2524) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2677) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2549) at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1861) at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2073) at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2009) at com.mysql.jdbc.PreparedStatement.executeLargeUpdate(PreparedStatement.java:5098) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1994)

我怎样才能解决这个问题 - JDBC 是否有某种转义字符来处理这个问题?

注意:我知道 JDBC 批处理执行。我正在寻找上述问题的解决方案 - 如果有的话:

pStat.addBatch();
pStat.executeBatch();

TIA。

进一步注意:上面的插入查询直接在 MySQL 上运行良好,中间没有 JDBC。另请注意:当 JDBC 本身使用 pStat.getString("aa@gmail.com"); 设置参数时,这不是问题 - 因此批处理 execn 是一个解决方案。

最佳答案

尝试使用 PreparedStatement。它自动解析特殊字符并避免 sql 注入(inject)。

String queryStr = "insert into table1 (field1, field2) values(?, ?);"
try {
PreparedStatement preparedStatement = conn.prepareStatement(queryStr);
preparedStatement.setString(1, "aa@gmail.com");
preparedStatement.setString(2, "f2 value");
preparedStatement.executeUpdate();
} catch (SQLException e) {
// Error
} finally {
if (preparedStatement != null) {
preparedStatement.close();
}
if (conn != null) {
conn.close();
}
}

更多示例:https://www.mkyong.com/jdbc/jdbc-preparestatement-example-insert-a-record/

关于java - '@' 的转义字符——JDBC?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50532976/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com