如何解决FindBugs警告“准备好的语句是从非常量字符串生成的”?

时间:2011-11-21 16:11:01

标签: java findbugs

我有以下代码,其中FindBugs抱怨“准备好的语句是从第二行的非常量字符串生成的......”。我尝试将“sqlNew”声明为 final ,但它没有帮助。我不是在其他任何地方操纵字符串。我如何摆脱这个警告?

String sqlNew = "insert into table (itemkey, attribute, value, updateddate, updatedby)  values (?, ?, ?, getDate(), '')";
stmtNew = conn.prepareStatement(sqlNew);

2 个答案:

答案 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中的一个错误。