I am trying to get Java to create a database using JDBC but I get a syntax error, despite the query being correct. If I write the name of a database into the code explicitly, for example, it works fine. Here's my code:
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);
}
}
}
My Main Class
package mysql_manipulator;
public class Mysql_manipulator {
public static void main(String[] args) {
Create myObj = new Create();
myObj.createDatabase("whatevs");
}
}
The error
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
Huge thanks to anyone who knows why this isn't working - I've searched all over the web to no avail.
You cannot have the database name as a bind variable -- you have to embed it in the query literal. Change your query into this instead:
String query = "CREATE DATABASE " + getDatabaseName();
You can also use a plain Statement
(instead of PreparedStatement
) for running this SQL.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With