gpt4 book ai didi

java - 通过 Mybatis 运行时无法识别 SQLite 命令

转载 作者:行者123 更新时间:2023-12-01 19:32:07 37 4
gpt4 key购买 nike

我正在尝试使用 Mybatis 运行 SQL 脚本来初始化数据库,如图 here但得到一个 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() 工作,或者我是否必须解析并执行代码中的语句?

谢谢!

最佳答案

这是转义处理,即not implemented由司机驾驶。
禁用转义处理应该可以。

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

关于java - 通过 Mybatis 运行时无法识别 SQLite 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59396329/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com