【发布时间】:2011-04-09 00:14:04
【问题描述】:
我想知道一些基于用户输入动态创建表的方法(SQL 准备语句)
CREATE TABLE ? (
First_Name char(50),
Last_Name char(50)
)
问号应该用什么代替
【问题讨论】:
标签: java sql jdbc prepared-statement
我想知道一些基于用户输入动态创建表的方法(SQL 准备语句)
CREATE TABLE ? (
First_Name char(50),
Last_Name char(50)
)
问号应该用什么代替
【问题讨论】:
标签: java sql jdbc prepared-statement
PreparedStatement 占位符不适用于表名或列名,它们仅用于实际列值。
因此您必须动态创建(准备好的)语句字符串,这意味着您的应用程序将容易受到 SQL 注入的影响。取决于应用程序的使用方式 - 以及由谁使用 - 这可能是一个大问题。
【讨论】:
正如其他答案所指出的,在这种情况下您不能使用准备好的语句,因为大多数 DBMS 不支持替换表名。
但是,我想指出,根据用户输入选择表名似乎是个坏主意。如何防止重复或无效名称?
为什么表名很重要?
【讨论】: