无法创建数据库jdbc

我正在尝试使用java jdbc创建一个带有方法的数据库,所以我将数据库的名称类型string作为参数传递给数据库,但是我遇到的问题是你的SQL语法有错误; 检查与MySQL服务器版本对应的手册,以便在第1行的”Algebra”附近使用正确的语法

 import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; public class DbTest { private Connection connection; public void createDb(String name) throws SQLException { connection = DriverManager.getConnection ("jdbc:mysql://localhost/?user=root&password=root"); String createDbSql = "CREATE DATABASE IF NOT EXISTS ?"; PreparedStatement createDbStat = connection.prepareStatement(createDbSql); createDbStat.setString(1,name); createDbStat.executeUpdate(); } DbTest() { try { createDb("Algebra"); } catch (SQLException e) { e.printStackTrace(); } } public static void main(String[] args) { new DbTest(); } } 

当你使用createDbStat.setString(1, name); 它会创建一个这样的查询:

 CREATE DATABASE IF NOT EXISTS 'databasename' //----------------------------^____________^ 

这是一个错误的语法,正确的应该是:

 CREATE DATABASE IF NOT EXISTS databasename 

要解决您的问题,您可以使用:

 String createDbSql = String.format("CREATE DATABASE IF NOT EXISTS `%s`", name); // ^^^^ PreparedStatement createDbStat = connection.prepareStatement(createDbSql); //createDbStat.setString(1,name); no need for this createDbStat.executeUpdate(); 

出于安全原因

出于安全原因,为了避免SQL注入,请确保您的数据库名称与此匹配:

 if(name.matches("^[a-zA-Z_][a-zA-Z0-9_]*$")){ //Correct name } 

有关详细信息,请阅读此检查有效的SQL列名称

您不能将参数(1)绑定到数据库名称 – 在这种情况下您必须使用字符串连接。

你的问题也类似于

如何为java预处理语句插入使用tablename变量

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