下面是主类:
public class Main {
// JDBC driver name and database URL
static final String JDBC_DRIVER = "org.h2.Driver";
static final String DB_URL = "jdbc:h2:mem:default";
// Database credentials
static final String USER = "sa";
static final String PASS = "";
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
try {
// STEP 1: Register JDBC driver
Class.forName(JDBC_DRIVER);
//STEP 2: Open a connection
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
//STEP 3: Execute a query
ScriptRunner sr = new ScriptRunner(conn);
//Creating a reader object
Reader reader = new BufferedReader(new FileReader("C:\\PROJECTS\\src\\main\\resources\\createDatabaseAndUser.sql"));
//Running the script
sr.runScript(reader);
// STEP 4: Clean-up environment
conn.close();
} catch (SQLException se) {
//Handle errors for JDBC
se.printStackTrace();
} catch (Exception e) {
//Handle errors for Class.forName
e.printStackTrace();
} finally {
//finally block used to close resources
try {
if (stmt != null) stmt.close();
} catch (SQLException se2) {
} // nothing we can do
try {
if (conn != null) conn.close();
} catch (SQLException se) {
se.printStackTrace();
} //end finally try
} //end try
System.out.println("Goodbye!");
}
}位于资源文件夹中的createDatabaseAndUser.sql文件:
CREATE SCHEMA database;
CREATE USER ADMIN PASSWORD 'abc';我正在尝试运行我的SQL脚本,但收到并出错。
以下是所有输出:
Connecting to database...
CREATE SCHEMA database
Error executing: CREATE SCHEMA database.Cause: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error
in SQL statement "CREATE[*] SCHEMA DATABASE"; SQL statement:
CREATE USER ADMIN PASSWORD 'abc'
CREATE SCHEMA database
[42000-199]
Goodbye!我的SQL方言是H2,并且我使用Intelij IDEA中的嵌入式H2数据库。
我刚开始学习SQL和SQL脚本,所以如果问题很愚蠢,请提前道歉。
发布于 2020-01-31 21:58:53
看起来您使用的工具的输出不知何故是乱码。有CREATE[*] SCHEMA DATABASE命令([*]是来自H2的标记),但是源SQL被列为
CREATE USER ADMIN PASSWORD 'abc'
CREATE SCHEMA database由于两个命令之间缺少分号,它显然是无效的。
两个位置应相同( [*]标记除外),错误消息应为
Syntax error in SQL statement "CREATE USER ADMIN PASSWORD 'abc'
CREATE[*] SCHEMA DATABASE "; SQL statement:
CREATE USER ADMIN PASSWORD 'abc'
CREATE SCHEMA database [42000-199]因此,您可能在源文件中缺少分号,或者此工具会将其删除。其实你不需要使用第三方工具,你可以直接在H2中执行脚本:
Statement st = conn.createStatement();
st.execute("RUNSCRIPT FROM 'C:\\PROJECTS\\src\\main\\resources\\createDatabaseAndUser.sql'");https://stackoverflow.com/questions/59988775
复制相似问题