我运行了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行的错误。
错误:ie.lyit.flight.Changeadd $ 5.actionPerformed(ActionEvent)将非常量String传递给SQL语句上的execute或addBatch方法 该方法使用似乎是动态生成的String在SQL语句上调用execute或addBatch方法。请考虑使用预准备语句。它更有效,更不容易受到SQL注入攻击。
排名:令人不安(10),信心:很高 模式:SQL_NONCONSTANT_STRING_PASSED_TO_EXECUTE 类型:SQL,类别:安全(安全)
我想知道是否有人知道如何摆脱这个错误以及我将如何去做呢?
答案 0 :(得分:3)
请参阅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();