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