我想插入类似 \mytext
的内容使用 JDBC 导入 MySQL 数据库。我尝试使用Java String替换方法找到所有反斜杠并将它们变成双反斜杠。在Java本身中,我必须用双反斜杠转义每个反斜杠,所以根据我的理解,应该是这样:
String sqlProcessed = sqlString.replace("\\", "\\\\")
我使用插入语句发送到数据库的结果字符串,用“单引号”括起来,如下所示:
String query = "INSERT INTO table VALUES ('" + sqlProcessed + "')";
但是,我在数据库中得到了一个双反斜杠,而不是显示预期的结果,即 \\mytext
。另一方面,如果没有处理,反斜杠就会被省略,即,我得到 mytext
在数据库中。
我做错了什么?
最佳答案
不要将值连接到查询字符串中(唯一有效的异常(exception)是您需要动态确定表名和列名)。
相反,您应该使用参数化(或准备好的)语句:
例如
try (PreparedStatement preparedStatement = connection.prepareStatement(
"insert into myTable (column1, column2, column3) values (?, ?, ?)")) {
preparedStatement.setString(1, "value1");
preparedStatement.setInt(2, 2);
preparedStatement.setString(3, "value3");
preparedStatement.executeUpdate();
}
使用准备好的语句将消除数据库转义的需要(驱动程序会处理这个问题,或者参数值以不需要转义的方式发送到服务器),您只需要注意正常的 Java 字符串转义。
作为额外的好处,您可以获得一个可重用的语句,您可以使用不同的值多次执行该语句。在大多数数据库系统上(但 IIRC 不在具有 Connector/J 驱动程序默认设置的 MySQL 上),使用准备好的语句在重用时可以(并且通常会)具有性能优势。
关于mysql - 如何使用 JDBC 在 MySQL 中转义反斜杠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31861921/