java - FindBugs 说我需要 "use a prepared statement"?如何?

标签 java jdbc findbugs

我运行 FindBugs,这是第 2 行的错误。

Statement st = con.createStatement();
                        st.executeUpdate("UPDATE menu set menu.name'"
                                + value2 + "', menu.info'" + value3
                                + "', menu.price'" + value4
                                + "' where menu.menuID='" + value1 + "'");
                        JOptionPane.showMessageDialog(p2,
                                "Updated successfully");
                        con.close();
                    } catch (Exception ex) {
                        JOptionPane.showMessageDialog(p2,
                                "Error in updating edit fields");
                    }
                }
            } catch (Exception ex) {
                JOptionPane.showMessageDialog(p2, "Error");
            }
        }
    });

我运行 FindBugs,这是第 2 行的错误。

Bug: ie.lyit.flight.Changeadd$5.actionPerformed(ActionEvent) passes a nonconstant String to an execute or addBatch method on an SQL statement The method invokes the execute or addBatch method on an SQL statement with a String that seems to be dynamically generated. Consider using a prepared statement instead. It is more efficient and less vulnerable to SQL injection attacks.

Rank: Troubling (10), confidence: High Pattern: SQL_NONCONSTANT_STRING_PASSED_TO_EXECUTE Type: SQL, Category: SECURITY (Security)

我想知道是否有人知道如何消除这个错误以及我将如何去做?

最佳答案

参见the JDBC tutorial on using prepared statements .

在这种情况下,这可能看起来像:

stmt = con.prepareStatement("UPDATE menu set menu.name=?, menu.info=?, menu.price=? where menu.menuID=?")
stmt.setString(1, value2); /* menu.name */
stmt.setString(2, value3); /* menu.info */
stmt.setFloat(3, value4);  /* menu.price */
stmt.setInt(4, value1);    /* menuID */
stmt.executeUpdate();

关于java - FindBugs 说我需要 "use a prepared statement"?如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29752588/

相关文章:

java - 有没有办法通过 checkstyle 或 findbugs 限制某些 java 导入

maven - fb-contrib 错误显示为未知错误模式

java - 传输原始数据,例如 int、float-tuple : More efficient to parse strings or convert to byte array?

java - neo4j Rest api发送多个查询和参数

java - 循环遍历数组太多次Java

java - Maven ejb-client 生成依赖排除

mysql - 无法连接到 GCP 上的云 sql

java - 在 NetBeans 中将 HTML 与 MSAcess 连接起来

jdbc - 是否可以通过 SSIS 建立 JDBC 连接?

java - 是否有开源插件可以根据 Findbugs Report 在 JIRA 中标记问题?