【问题标题】:SQL Prepared Statement to Create Table用于创建表的 SQL 准备语句
【发布时间】:2011-04-09 00:14:04
【问题描述】:

我想知道一些基于用户输入动态创建表的方法(SQL 准备语句)

CREATE TABLE ? (
  First_Name char(50),
  Last_Name char(50)
)

问号应该用什么代替

【问题讨论】:

    标签: java sql jdbc prepared-statement


    【解决方案1】:

    PreparedStatement 占位符不适用于表名或列名,它们仅用于实际列值。

    因此您必须动态创建(准备好的)语句字符串,这意味着您的应用程序将容易受到 SQL 注入的影响。取决于应用程序的使用方式 - 以及由谁使用 - 这可能是一个大问题。

    相关问题

    【讨论】:

    • 这就是我的想法——Java 的 PreparedStatement 遵守了不允许参数化表和列名的 SQL 约定...
    • @OMG 的确如此,恕我直言。
    【解决方案2】:

    正如其他答案所指出的,在这种情况下您不能使用准备好的语句,因为大多数 DBMS 不支持替换表名。

    但是,我想指出,根据用户输入选择表名似乎是个坏主意。如何防止重复或无效名称?

    为什么表名很重要?

    【讨论】:

    • 他可能正在为一些类似 TOAD 的工具实现“创建表”向导
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多