jdbc传递的sqlite3 integrity_check表示数据库图像格式错误

时间:2017-02-02 22:58:58

标签: scala jdbc sqlite slick

我有一个16Gb的sqlite3数据库,当我可以通过jdbc时抛出此错误:

[SQLException: [SQLITE_CORRUPT]  The database disk image is malformed (database disk image is malformed)]

play.api.http.HttpErrorHandlerExceptions$$anon$1: Execution exception[[SQLException: [SQLITE_CORRUPT]  The database disk image is malformed (database disk image is malformed)]]
    at play.api.http.HttpErrorHandlerExceptions$.throwableToUsefulException(HttpErrorHandler.scala:293)
    at play.api.http.DefaultHttpErrorHandler.onServerError(HttpErrorHandler.scala:220)
    at play.api.GlobalSettings$class.onError(GlobalSettings.scala:160)
    at play.api.DefaultGlobal$.onError(GlobalSettings.scala:188)
    at play.api.http.GlobalSettingsHttpErrorHandler.onServerError(HttpErrorHandler.scala:100)
    at play.core.server.netty.PlayRequestHandler$$anonfun$2$$anonfun$apply$1.applyOrElse(PlayRequestHandler.scala:100)
    at play.core.server.netty.PlayRequestHandler$$anonfun$2$$anonfun$apply$1.applyOrElse(PlayRequestHandler.scala:99)
    at scala.concurrent.Future$$anonfun$recoverWith$1.apply(Future.scala:346)
    at scala.concurrent.Future$$anonfun$recoverWith$1.apply(Future.scala:345)
    at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32)
Caused by: java.sql.SQLException: [SQLITE_CORRUPT]  The database disk image is malformed (database disk image is malformed)
    at org.sqlite.DB.newSQLException(DB.java:383)
    at org.sqlite.DB.newSQLException(DB.java:387)
    at org.sqlite.DB.throwex(DB.java:374)
    at org.sqlite.NestedDB.prepare(NestedDB.java:134)
    at org.sqlite.DB.prepare(DB.java:123)
    at org.sqlite.PrepStmt.<init>(PrepStmt.java:42)
    at org.sqlite.Conn.prepareStatement(Conn.java:404)
    at org.sqlite.Conn.prepareStatement(Conn.java:399)
    at org.sqlite.Conn.prepareStatement(Conn.java:383)
    at slick.jdbc.JdbcBackend$SessionDef$class.prepareStatement(JdbcBackend.scala:252)

我使用sqlite3命令行实用程序检查了数据库,没有问题:

sqlite> pragma integrity_check;
ok
sqlite> 

我可以使用sqlite3命令行实用程序查询它,但不能使用jdbc查询,因为异常。

我有8个其他数据库(在命令行实用程序中使用csv loader以相同的方式创建),每个数据库大约1Gb,并且使用jdbc访问它们没有问题(通过slick调用)..

我尝试使用

转储数据库
echo '.dump' | sqlite3 titleRelV4.db | sqlite3 titleRelV4_COPY.db

但这根本没有帮助..我很困惑..对于sqlite数据库来说16Gb是否太大了?还有什么我可以做的吗?

修改 数据库正在使用linux。看起来像是特定于mac的bug。

1 个答案:

答案 0 :(得分:0)

当我运行使用有问题的sqlite数据库的Java应用程序时,我关闭了sqlitestudio,并且不再有任何错误消息。我认为所有的原因是数据库不再接受连接或无法管理连接,因此,如果在Java中有多个同时访问,则异常“磁盘映像格式错误(代码11)”