Я пытаюсь создать базу данных с 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-инъекции убедитесь, что имя вашей базы данных соответствует этому:
if (name.matches("^[a-zA-Z_][a-zA-Z0-9_]*$")){
//Correct name
}
для более подробной информации прочтите этот Проверьте правильность имени столбца SQL
Вы не можете привязать свой параметр (1) к имени базы данных - в этом случае вам придется использовать конкатенацию строк.
Ваш вопрос тоже похож на
Как использовать переменную tablename для вставки подготовленного оператора java
а также