java 生成mysql insert 语句 时候,特殊字符转义处理
时间: 2023-07-11 14:03:37 浏览: 332
在 Java 中生成 MySQL 的 Insert 语句时,特殊字符需要进行转义处理,否则会导致 SQL 语句执行错误或者 SQL 注入攻击。下面是一个示例代码:
```
String name = "Tom";
String address = "No.1, 'Main' Street";
// 对特殊字符进行转义处理
name = name.replaceAll("'", "''");
address = address.replaceAll("'", "''");
// 生成 SQL 语句
String sql = "INSERT INTO users (name, address) VALUES ('" + name + "', '" + address + "')";
```
在上面的代码中,我们使用 `replaceAll` 方法将字符串中的单引号 `'` 转义为两个单引号 `''`,然后使用拼接字符串的方式生成 SQL 语句。这样就能保证在执行 SQL 语句时不会出现错误或者注入攻击。
相关问题
java 生成mysql insert 语句 时候,转义处理工具类
可以使用如下的工具类来处理转义:
```java
public class MySqlStringUtil {
/**
* 将字符串中的特殊字符转义
*
* @param str 待转义的字符串
* @return 转义后的字符串
*/
public static String escape(String str) {
if (str == null) {
return null;
}
StringBuilder sb = new StringBuilder(str.length() * 2);
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
switch (ch) {
case 0:
continue;
case '\n':
sb.append("\\n");
break;
case '\r':
sb.append("\\r");
break;
case '\\':
sb.append("\\\\");
break;
case '\'':
sb.append("\\'");
break;
case '\"':
sb.append("\\\"");
break;
case '\032':
sb.append("\\Z");
break;
case '\u00a5':
case '\u20a9':
// escape characters interpreted as backslash by mysql
sb.append('\\');
sb.append(ch);
break;
default:
sb.append(ch);
}
}
return sb.toString();
}
}
```
使用方法:
```java
String str = "I'm a string with ' and \\ characters";
String escapedStr = MySqlStringUtil.escape(str);
String insertSql = "insert into table_name (column1, column2) values ('" + escapedStr + "', 'value2')";
```
这样生成的 `insert` 语句中的特殊字符就都被转义了。
阅读全文