簡體   English   中英

通過 Mybatis 運行時無法識別 SQLite 命令

[英]SQLite commands not recognized when running through Mybatis

我正在嘗試使用 Mybatis 運行 SQL 腳本來初始化數據庫,如下所示但得到一個SQLException說“不是由 SQLite JDBC 驅動程序實現”。 我已經檢查過我的 SQL 語句是否有效,並且它通過控制台界面和 Java 的PreparedStatement在同一個數據庫上工作。

這是我的初始化類以及成功創建表的代碼注釋掉:

public void init() throws Exception {
        ClassLoader loader = Thread.currentThread().getContextClassLoader();
        InputStream stream = loader.getResourceAsStream("db_init.sql");

        try (Connection conn = getConnection()) {
            ScriptRunner sr = new ScriptRunner(conn);
            sr.runScript(new InputStreamReader(stream));
            //PreparedStatement stmt = conn.prepareStatement("CREATE TABLE IF NOT EXISTS TestTable (testColumn TEXT);");
            //stmt.execute();
        } catch (Exception e) {
            throw e;
        }
    }

db_init.sql包含的 SQL 與注釋的conn.prepareStatement()調用中的 SQL 完全相同。

這是生成的控制台輸出:

CREATE TABLE IF NOT EXISTS TestTable (
  testColumn TEXT
)

Error executing: CREATE TABLE IF NOT EXISTS TestTable (
  testColumn TEXT
)
.  Cause: java.sql.SQLException: not implemented by SQLite JDBC driver
org.apache.ibatis.jdbc.RuntimeSqlException: Error executing: CREATE TABLE IF NOT EXISTS TestTable (
  testColumn TEXT
)
.  Cause: java.sql.SQLException: not implemented by SQLite JDBC driver
        at org.apache.ibatis.jdbc.ScriptRunner.executeLineByLine(ScriptRunner.java:150)
        at org.apache.ibatis.jdbc.ScriptRunner.runScript(ScriptRunner.java:110)
        at fi.basse.shamery.db.Database.init(Database.java:60)
        at fi.basse.shamery.Main.main(Main.java:19)
Caused by: java.sql.SQLException: not implemented by SQLite JDBC driver
        at org.sqlite.jdbc3.JDBC3Statement.unused(JDBC3Statement.java:387)
        at org.sqlite.jdbc3.JDBC3Statement.setEscapeProcessing(JDBC3Statement.java:382)
        at org.apache.ibatis.jdbc.ScriptRunner.executeStatement(ScriptRunner.java:230)
        at org.apache.ibatis.jdbc.ScriptRunner.handleLine(ScriptRunner.java:210)
        at org.apache.ibatis.jdbc.ScriptRunner.executeLineByLine(ScriptRunner.java:143)
        ... 3 more

有沒有辦法讓ScriptRunner.runScript()工作,還是我必須解析和執行代碼中的語句?

謝謝!

這是驅動程序沒有實現的轉義處理。
禁用轉義處理應該有效。

ScriptRunner sr = new ScriptRunner(conn);
sr.setEscapeProcessing(false);
sr.runScript(new InputStreamReader(stream));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM