我有以下代码,其中FindBugs抱怨“准备好的语句是从第二行的非常量字符串生成的......”。我尝试将“sqlNew”声明为 final ,但它没有帮助。我不是在其他任何地方操纵字符串。我如何摆脱这个警告?
String sqlNew = "insert into table (itemkey, attribute, value, updateddate, updatedby) values (?, ?, ?, getDate(), '')";
stmtNew = conn.prepareStatement(sqlNew);
答案 0 :(得分:3)
我建议使用ALL_CAPS命名约定将字符串声明为类顶部的private static final
变量:
private static final String SQL_NEW = "insert into table (itemkey, attribute, value, updateddate, updatedby) values (?, ?, ?, getDate(), '')";
答案 1 :(得分:2)
错误是试图找到你做的案例
String query = "insert into table (itemkey, attribute, value, updateddate, updatedby) values (?, ?, ?, " + getDate() + ", '')";
这是字符串连接在一起。这与最终决定毫无关系。
Findbugs期望字符串加载LDC指令,并且没有任何StringBuilder操作。原因是你可以使用sql注入。
你的例子看起来很好。你确定这正是findbugs报告的代码吗?如果是这样,它就是FindBugs中的一个错误。