我在方法中使用下面的代码:
// These three code snippets mean the same thing.
// If x is true according to groovy truth return x else return y
x ?: y
x ? x : y // Standard ternary operator.
if (x) {
return x
} else {
return y
}
并在此行显示警告:final StringBuffer queryBuffer = new StringBuffer(100);
queryBuffer.append("update ").append(tblContainerItem).append(" ");
queryBuffer.append("set SENT_STATUS=").append(CaaConstants.STATUS_CI_SENT);
queryBuffer.append(", SENT_DATE='").append(today.toString()).append("' ");
final int len = containerItemIds.length;
for (int i = 0; i < len; i++) {
if (i == 0) {
queryBuffer.append("where CI_ID=");
} else {
queryBuffer.append(" or CI_ID=");
}
queryBuffer.append(containerItemIds[i]);
}
try {
conn = getConnection();
pstmt = conn.prepareStatement(queryBuffer.toString());
...
如何避免此警告?我知道使用pstmt = conn.prepareStatement(queryBuffer.toString());
,但这不是消除此错误的正确方法。
答案 0 :(得分:4)
你正在构建的是动态sql,它通常被认为是固有的危险。例如,您似乎对要更新的表没有限制。相反,你应该做类似
的事情String update = "update MY_TABLE set SENT_STATUS=?, SENT_DATE=? where CI_ID=?";
try {
conn = getConnection();
pstmt = conn.prepareStatement(update);
pstmt.setString(1, CaaConstants.STATUS_CI_SENT);
pstmt.setString(2, today.toString());
pstmt.setString(3, containerItemIds[i]);
//...
这有两件事
请注意,如果您已将表名设置为动态,因为您有多个具有相同列的不同表,