public class QueryGenerater { public static String generateFunctionQuery(String n, List<Map<String, Object>> data) { var s = "insert into "; s.concat(n); s.concat(" "); s.concat("(id, name, create_time, status) values "); for (Map<String, Object> _data: data){ s.concat("('"); s.concat((String) _data.get("id")); s.concat("','"); s.concat((String) _data.get("name")); s.concat("','"); s.concat((String) _data.get("create_time")); s.concat("','"); s.concat((String) _data.get("status")); s.concat("),"); } return s.substring(0, s.length() - 1); } }请优化这段代码
时间: 2024-01-10 17:03:56 浏览: 66
这段代码可以进行如下优化:
1. 使用 StringBuilder 类型来拼接字符串,性能更高。
2. 使用参数化查询,避免 SQL 注入攻击。
3. 将字符串连接操作合并到一起,减少了字符串对象的创建和垃圾回收。
重写后的代码如下:
```
public class QueryGenerater {
public static String generateFunctionQuery(String n, List<Map<String, Object>> data) {
StringBuilder sb = new StringBuilder();
sb.append("insert into ").append(n).append(" (id, name, create_time, status) values ");
for (Map<String, Object> _data : data) {
sb.append(" (?, ?, ?, ?),");
}
sb.deleteCharAt(sb.length() - 1); // 删除最后一个逗号
return sb.toString();
}
}
```
请注意,这个方法只是生成 SQL 查询语句,而不是执行查询语句,因此必须在另一个方法中执行查询语句。在执行查询语句时,应该使用参数化查询,以避免 SQL 注入攻击。
阅读全文