使用预处理语句在MySql中无法创建数据库。

7

我正在尝试在MySQL中使用预编译语句创建数据库。这里我传递的参数如下所示。

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

但我遇到了语法错误。是否可以使用预处理语句创建表和数据库?

1个回答

13

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

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

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

很好的回答,但我有一个问题:这里应该手动验证 dbName 吗? - mehmetseckin
1
这是一个“基础”的答案 - 如果您从用户输入中获取dbName,您应该可能添加一些输入合理性/验证。 - Mureinik
我知道,我只是想知道Statement.execute()方法是否对输入的查询进行任何验证;还是仅发送查询而不进行任何验证。谢谢。 - mehmetseckin
它只是将其发送到数据库。 - Mureinik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接