【问题标题】:Unable to create database using prepared statements in MySql无法在 MySql 中使用准备好的语句创建数据库
【发布时间】:2014-12-22 08:18:10
【问题描述】:

我正在尝试使用 MySQL 中的准备好的语句创建数据库。这里我传递的是如图所示的参数。

PreparedStatement createDbStatement = connection.prepareStatement("CREATE DATABASE ?");
createDbStatement.setString(1, "first_database");
createDbStatement.execute();
connection.commit();

但我收到语法错误。是否可以使用prepared statements创建表和数据库?

【问题讨论】:

    标签: java mysql jdbc syntax-error ddl


    【解决方案1】:

    PreparedStatement 中只能用于绑定值(例如,在where 条件中的values 子句中),而不是对象名称。因此,您不能使用它来绑定数据库的名称。

    您可以使用字符串操作来添加数据库名称,但在这种情况下,使用PreparedStatements 确实没有任何好处,您应该只使用Statement

    String dbName = "first_database";
    Statement createDbStatement = connection.createStatement();
    createDbStatement.execute("CREATE DATABASE " + dbName);
    

    【讨论】:

    • 不错的答案,但我有一个问题; dbName 是否应该在此处手动验证?
    • 这是一个“骨架”答案 - 如果您从用户输入中获取 dbName,您可能应该在此处添加一些输入完整性/验证。
    • 我知道,我只是想知道Statement.execute() 方法是否对输入查询进行任何验证;或者它只是发送查询而不进行任何验证。谢谢。
    • 它只是将它发送到数据库
    猜你喜欢
    • 2011-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多