我正在使用以下内容更新SQL表中的字段:
private String updateData(Handle handle, String username, String name, String table) {
handle.createStatement("sql/Create.sql")
.bind("playername", name)
.bind("tablename", table)
.execute();
}
Create.sql文件如下:
UPDATE :tablename SET varname = :playername where name = :username
我知道它不起作用,因为:tablename是一个字符串变量。我为SQL写了什么代码来识别表名,好像我实际上把它键入硬代码一样?
答案 0 :(得分:0)
您不能将表名作为参数传递 - 只能传递数据。您需要更改字符串并粘贴"将表名转换为SQL本身。 非常重要的注意事项:您必须确保table
变量的值不是来自任何类型的用户输入。否则,您将打开SQL注入攻击的代码。
String sql = String.format("UPDATE %s SET varname = :playername where name = :username", table);
handle.createStatement(sql).bind("playername", name).execute();
如果table
的值确实来自用户输入,请更改代码以使用程序中定义的不同硬编码或预配置字符串。