使用java jdbc和prepared语句的CREATE DATABASE查询返回语法错误

我试图让Java使用JDBC创建数据库但我得到语法错误,尽管查询是正确的。 例如,如果我明确地将数据库的名称写入代码中,它就可以正常工作。 这是我的代码:

package mysql_manipulator; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; public class Create { private static final String driver = "com.mysql.jdbc.Driver", url = "jdbc:mysql://localhost", username = "dylan", password = "******"; private String databaseName; public Create (){ this.databaseName = null; } public String getDatabaseName() { return databaseName; } public void setDatabaseName(String databaseName) { this.databaseName = databaseName; } public void createDatabase(String databaseName){ try { this.setDatabaseName(databaseName); Class.forName(driver); Connection con = DriverManager.getConnection(url,username, password); String query = "CREATE DATABASE ?"; PreparedStatement preparedStmt = con.prepareStatement(query); preparedStmt.setString (1,this.getDatabaseName()); preparedStmt.execute(); preparedStmt.close(); con.close(); } catch (Exception anException){ System.out.println("Error: " + anException); } } } 

我的主要课程

 package mysql_manipulator; public class Mysql_manipulator { public static void main(String[] args) { Create myObj = new Create(); myObj.createDatabase("whatevs"); } } 

错误

 Error: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''whatevs'' at line 1 

非常感谢任何知道为什么这不起作用的人 – 我在网上搜索都无济于事。

您不能将数据库名称作为绑定变量 – 您必须将其嵌入查询文字中。 将您的查询更改为:

 String query = "CREATE DATABASE " + getDatabaseName(); 

您还可以使用普通Statement (而不是PreparedStatement )来运行此SQL。

 Conn = DriverManager.getConnection ("jdbc:mysql://localhost/?user=root&password=rootpassword"); Statement s=Conn.createStatement(); int Result=s.executeUpdate("CREATE DATABASE databasename"); 

看到

http://forums.mysql.com/read.php?39,99321,102211#msg-102211

从Java创建MySQL数据库