0
私はSonarQubeと私のコードをスキャンしていると私は、次のバグを取得しています:SonarQube非定数文字列
-A準備文は上の方法を実行するために渡された非定数文字列 -Nonconstant文字列から生成されますSQL文
いくつかの条件に基づいて追加するSQLクエリがあります。
例:
PreparedStatement ps = null;
StringBuilder sql = new StringBuilder("UPDATE" + tableName + " SET some_field = ? WHERE a_field = a_value");
if (myObject.getField1() != null) {
sql.append(" AND Field1 = " + myObject.getField1());
}
if (myObject.getField2() != null) {
sql.append(" AND Field2 = " + myObject.getField2());
}
if (myObject.getField3() != null) {
sql.append(" AND Field3 = " + myObject.getField3());
}
if (myObject.getField4() != null) {
sql.append(" AND Field4 = " + myObject.getField4());
}
...
**ps = connection.prepareStatement(sql.toString());** //generating bug
if (myObject.getSomeField() == null) {
ps.setNull(1, nevermind);
} else {
ps.setString(1, myObject.getSomeField());
}
Iは、最終文字列を渡す試み
= sql.toString()。 prepareStatement()関数に渡しても、バグが生成されます。
残念ながら、特定の条件を満たす場合にのみクエリに追加するため、列をハードコードできません。唯一のソリューションはハードコーディングですか? –