| 2017.9.13 - 银川 | java |
在java中使用PreparedStatement时,设置值的序号是从1开始,容易出错,不易维护
方法1:使用一个变量自增的方法
方法2:使用一个包装类,将变量使用:column这种方式入参,核心代码如下:
原始方式代码:
conn = getConnection();
PreparedStatement ps = conn.prepareStatement("update table set field2=? where field2=?");
ps.setInt(1, 1000);
ps.setInt(2, 10);
... ...
修改后代码:
conn = getConnection();
PreparedStatement ps = null;
PreStateWraper psw = new PreStateWraper(conn, "update table set field2=:field1 where field2=:field2"); // 注意sql中的参数名称前必须加":"而且他们之间不能有空格
psw.setInt("field1", 1000); // 如果sql语句中出现两次以上的field1参数,也只需set一次
psw.setInt("field2", 10);
... ...
核心方法:
public PreStateWraper(Connection conn, String sql) throws SQLException {
String psql = checkSql(sql);
preState = conn.prepareStatement(psql);
}
private String checkSql(String sql) {
Pattern pt = Pattern.compile(":(\\w*)");
Matcher matcher = pt.matcher(sql);
int pp = 0;
while (matcher.find()) {
pp++;
String pname = matcher.group(1);
List list = parameters.get(pname);
if (list == null)
list = new ArrayList();
list.add(pp);
parameters.put(pname, list);
sql = matcher.replaceFirst("?");
matcher = pt.matcher(sql);
}
return sql;
}
更新列表:
*
参考文章: