java - 通过Mybatis运行时无法识别SQLite命令
问题描述
我正在尝试使用 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;
}
}
其中包含的 SQL与注释调用db_init.sql
中的完全相同。conn.prepareStatement()
这是生成的控制台输出:
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));
推荐阅读
- string - 在字幕文件 (srt) 的某些行前面添加字符串
- c - 显示文件或文件夹不存在的 mpi.h 错误
- python - 带有管道的 Bash 和 Python 信号行为不一致
- c# - 在 C# 中属性的集合访问器中重命名“值”变量
- php - 记住我功能导致未知错误
- java - 将 Java (BouncyCastle) 移植到 NodeJs (CryptoJS)
- azure - 带有新 Active Directory 的 Azure 订阅
- android - 无法运行颤振应用程序显示 MissingPluginException
- sql - SQL Join到桥表的每一行(过滤)
- python - 有没有办法使用 pandas 获取仅属于数据集 d1 而不属于另一个 d2 的元素?