mysql 您的SQL语法中存在错误;当我尝试在Java中运行SQL时

zazmityj  于 2022-12-03  发布在  Mysql
关注(0)|答案(2)|浏览(215)

我尝试通过运行testdb.sql文件在Java中初始化数据库
第一个
下面是testdb.sql

CREATE DATABASE IF NOT EXISTS testDB;
USE testDB;

CREATE TABLE USERS(
    userType VARCHAR(50) not null,
    userName VARCHAR(100) not null,
    password VARCHAR(100) not null,
    primary key(userName)
);

我在MySQL工作台中运行了完全相同的SQL,它工作正常,但为什么当我尝试在java中运行时,它失败了,并警告SQL语法错误?以下是错误消息:
异常错误代码:SQL语法中有错误;请查看与您的MySQL服务器版本对应的手册,以了解在第3行的“CREATE TABLE USERS(userType VARCHAR(50)not null,userName VARCHAR(100)”附近使用的正确语法
我希望用Java代码在数据库中创建表

4zcjmb1e

4zcjmb1e1#

JDBC API是针对每条语句的,而您的代码一次执行两条语句。通常情况下,这是行不通的。对于MySQL Connector/J,您可以通过将连接属性allowMultiQueries设置为true来将其配置为接受多条语句。
但是,在使用JDBC驱动程序时,您不应该使用USE之类的语句,它可能会使驱动程序处于不一致的状态。您应该连接到正确的数据库,或者使用Connection.setCatalog方法。如MySQL Connector/J documentation
请始终使用Connection.setCatalog()方法指定JDBC应用程序中所需的数据库,而不要使用USE数据库语句。
如果您希望使用更高级的方法来执行模式更改,请查看Flyway或Liquibase等模式演化工具。

bvjveswy

bvjveswy2#

您有多行SQL脚本,而不是单行语句。
您可以使用脚本运行器来运行这些行

ScriptRunner sr = new ScriptRunner(con);
 Reader sqlFile = new BufferedReader(new FileReader(Paths.get("src/testdb.sql")))
 sr.runScript(sqlFile);

相关问题