java - 无法创建数据库jdbc

标签 java mysql jdbc

<分区>

我正在尝试使用 java jdbc 方法创建一个数据库,因此我将数据库的名称类型 string 作为参数传递给数据库,但我面临的问题是 您的 SQL 语法有误;查看与您的 MySQL 服务器版本对应的手册,了解在第 1 行的“代数”附近使用的正确语法

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 注入(inject),请确保您的数据库名称与此匹配:

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

有关更多详细信息,请阅读此 Check for valid SQL column name

关于java - 无法创建数据库jdbc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50320515/

相关文章:

java - - ->- - Java 中的运算符

java - 避免在 java 中进行强制转换(泛型)

javascript - 在 Ajax php 和 mysql 中读取响应

MySQL 的 HEX() 和 UNHEX() 等同于 Postgres?

mysql - 如何识别两个mysql表中哪些行不同

java - Hibernate @DynamicUpdate(value=true) @SelectBeforeUpdate(value=true) 性能

java - public <T extends Animal> void addAll(List<T> animals) 和 public void addAll(List<Animal> animals) 有什么区别?

java - 执行更新被阻止

java - JDBC字符串中的Mysql session 变量

java - 进行查找并编写查询以从 sql server 获取数据