Java “如何解决FindBugs警告”;准备好的语句是从非恒定字符串“quot;”生成的;?

Java “如何解决FindBugs警告”;准备好的语句是从非恒定字符串“quot;”生成的;?,java,findbugs,Java,Findbugs,我有以下代码,其中FindBugs在第二行抱怨“准备好的语句是从..处的非恒定字符串生成的”。我尝试将“sqlNew”声明为最终版本,但没有任何帮助。我不会在其他任何地方操纵绳子。我如何摆脱这个警告 String sqlNew = "insert into table (itemkey, attribute, value, updateddate, updatedby) values (?, ?, ?, getDate(), '')"; stmtNew = conn.prepareStatem

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

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

我建议使用ALL_CAPS命名约定,将字符串声明为类顶部的
私有静态final
变量:

private static final String SQL_NEW = "insert into table (itemkey, attribute, value, updateddate, updatedby)  values (?, ?, ?, getDate(), '')";

错误是试图找到您需要的案例

String query = "insert into table (itemkey, attribute, value, updateddate, updatedby)  values (?, ?, ?, " + getDate() + ", '')";
即字符串被连接在一起。这与最终结果无关

Findbugs希望该字符串加载LDC指令,而没有任何StringBuilder操作。原因是,如果这样做的话,您可以进行sql注入


你的例子看起来很好。你确定findbugs报告的代码就是这个吗?如果是这样的话,那就是FindBugs中的一个bug。

尝试将字符串设置为final?为什么不在谷歌上搜索“如何在Java中声明常量”?