SQL:使用create语句更新表

时间:2014-07-26 23:09:06

标签: sql

我正在使用以下内容更新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写了什么代码来识别表名,好像我实际上把它键入硬代码一样?

1 个答案:

答案 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的值确实来自用户输入,请更改代码以使用程序中定义的不同硬编码或预配置字符串。