Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
H2-一般和#xA0;错误: &引用;java.lang.NullPointerException“ ;[50000-182]_Java_Database_Nullpointerexception_H2 - Fatal编程技术网

H2-一般和#xA0;错误: &引用;java.lang.NullPointerException“ ;[50000-182]

H2-一般和#xA0;错误: &引用;java.lang.NullPointerException“ ;[50000-182],java,database,nullpointerexception,h2,Java,Database,Nullpointerexception,H2,我有一个相当大(>2.5GB)的h2数据库文件。驱动程序版本为1.4.182。一切正常,但最近DB停止工作,只有一个例外: Błąd ogólny: "java.lang.NullPointerException" General error: "java.lang.NullPointerException" [50000-182] HY000/50000 (Help) org.h2.jdbc.JdbcSQLException: Błąd ogólny: "java.lang.NullPoint

我有一个相当大(>2.5GB)的h2数据库文件。驱动程序版本为1.4.182。一切正常,但最近DB停止工作,只有一个例外:

Błąd ogólny: "java.lang.NullPointerException"
General error: "java.lang.NullPointerException" [50000-182] HY000/50000 (Help)
org.h2.jdbc.JdbcSQLException: Błąd ogólny: "java.lang.NullPointerException"
General error: "java.lang.NullPointerException" [50000-182] 
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:345) 
    at org.h2.message.DbException.get(DbException.java:168) 
    at org.h2.message.DbException.convert(DbException.java:295) 
    at org.h2.engine.Database.openDatabase(Database.java:297) 
    at org.h2.engine.Database.<init>(Database.java:260) 
    at org.h2.engine.Engine.openSession(Engine.java:60) 
    at org.h2.engine.Engine.openSession(Engine.java:167) 
    at org.h2.engine.Engine.createSessionAndValidate(Engine.java:145) 
    at org.h2.engine.Engine.createSession(Engine.java:128) 
    at org.h2.engine.Engine.createSession(Engine.java:26) 
    at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:347) 
    at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:108) 
    at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:92) 
    at org.h2.Driver.connect(Driver.java:72) 
    at org.h2.server.web.WebServer.getConnection(WebServer.java:750) 
    at org.h2.server.web.WebApp.test(WebApp.java:895) 
    at org.h2.server.web.WebApp.process(WebApp.java:221) 
    at org.h2.server.web.WebApp.processRequest(WebApp.java:170) 
    at org.h2.server.web.WebThread.process(WebThread.java:137) 
    at org.h2.server.web.WebThread.run(WebThread.java:93) 
    at java.lang.Thread.run(Thread.java:722) 
Caused by: java.lang.NullPointerException 
    at org.h2.mvstore.db.ValueDataType.compare(ValueDataType.java:102) 
    at org.h2.mvstore.MVMap.compare(MVMap.java:741) 
    at org.h2.mvstore.Page.binarySearch(Page.java:388) 
    at org.h2.mvstore.MVMap.put(MVMap.java:179) 
    at org.h2.mvstore.MVMap.put(MVMap.java:133) 
    at org.h2.mvstore.db.TransactionStore.rollbackTo(TransactionStore.java:491) 
    at org.h2.mvstore.db.TransactionStore$Transaction.rollback(TransactionStore.java:785) 
    at org.h2.mvstore.db.MVTableEngine$Store.initTransactions(MVTableEngine.java:223) 
    at org.h2.engine.Database.open(Database.java:736) 
    at org.h2.engine.Database.openDatabase(Database.java:266) 
... 17 more 
Błd ogólny:“java.lang.NullPointerException”
一般错误:“java.lang.NullPointerException”[50000-182]HY000/50000(帮助)
org.h2.jdbc.JdbcSQLException:Błąd ogólny:“java.lang.NullPointerException”
一般错误:“java.lang.NullPointerException”[50000-182]
位于org.h2.message.DbException.getJdbcSQLException(DbException.java:345)
位于org.h2.message.DbException.get(DbException.java:168)
位于org.h2.message.DbException.convert(DbException.java:295)
位于org.h2.engine.Database.openDatabase(Database.java:297)
位于org.h2.engine.Database(Database.java:260)
位于org.h2.engine.engine.openSession(engine.java:60)
位于org.h2.engine.engine.openSession(engine.java:167)
位于org.h2.engine.engine.createSessionAndValidate(engine.java:145)
位于org.h2.engine.engine.createSession(engine.java:128)
位于org.h2.engine.engine.createSession(engine.java:26)
位于org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:347)
JdbcConnection(JdbcConnection.java:108)
JdbcConnection(JdbcConnection.java:92)
位于org.h2.Driver.connect(Driver.java:72)
位于org.h2.server.web.WebServer.getConnection(WebServer.java:750)
位于org.h2.server.web.WebApp.test(WebApp.java:895)
位于org.h2.server.web.WebApp.process(WebApp.java:221)
位于org.h2.server.web.WebApp.processRequest(WebApp.java:170)
位于org.h2.server.web.WebThread.process(WebThread.java:137)
位于org.h2.server.web.WebThread.run(WebThread.java:93)
运行(Thread.java:722)
原因:java.lang.NullPointerException
位于org.h2.mvstore.db.ValueDataType.compare(ValueDataType.java:102)
位于org.h2.mvstore.MVMap.compare(MVMap.java:741)
位于org.h2.mvstore.Page.binarySearch(Page.java:388)
位于org.h2.mvstore.MVMap.put(MVMap.java:179)
位于org.h2.mvstore.MVMap.put(MVMap.java:133)
位于org.h2.mvstore.db.TransactionStore.rollbackTo(TransactionStore.java:491)
位于org.h2.mvstore.db.TransactionStore$Transaction.rollback(TransactionStore.java:785)
位于org.h2.mvstore.db.MVTableEngine$Store.initTransactions(MVTableEngine.java:223)
位于org.h2.engine.Database.open(Database.java:736)
位于org.h2.engine.Database.openDatabase(Database.java:266)
... 还有17个
问题发生在我的应用程序和使用H2 web前端时。 我尝试了来自的解决方案,但我无法将H2降级为1.3.x,因为它无法读取1.4.x DB文件

我的问题是

如何处理?有可能使它再次工作吗?我曾尝试将H2降级到1.4.177,但没有效果

有没有办法至少将数据恢复为其他格式?我可以使用其他数据库(Sqlite等),但是我需要一种获取这些数据的方法

编辑:更新的堆栈跟踪

编辑2:使用恢复工具的结果:

$ java -cp h2-1.4.182.jar org.h2.tools.Recover
Exception in thread "main" java.lang.IllegalStateException: Unknown tag 50 [1.4.182/6]
   at org.h2.mvstore.DataUtils.newIllegalStateException(DataUtils.java:762)
   at org.h2.mvstore.type.ObjectDataType.read(ObjectDataType.java:222)
   at org.h2.mvstore.db.TransactionStore$ArrayType.read(TransactionStore.java:1792)
   at org.h2.mvstore.db.TransactionStore$ArrayType.read(TransactionStore.java:1759)
   at org.h2.mvstore.Page.read(Page.java:843)
   at org.h2.mvstore.Page.read(Page.java:230)
   at org.h2.mvstore.MVStore.readPage(MVStore.java:1813)
   at org.h2.mvstore.MVMap.readPage(MVMap.java:769)
   at org.h2.mvstore.Page.getChildPage(Page.java:252)
   at org.h2.mvstore.MVMap.getFirstLast(MVMap.java:351)
   at org.h2.mvstore.MVMap.firstKey(MVMap.java:218)
   at org.h2.mvstore.db.TransactionStore.init(TransactionStore.java:169)
   at org.h2.mvstore.db.TransactionStore.<init>(TransactionStore.java:117)
   at org.h2.mvstore.db.TransactionStore.<init>(TransactionStore.java:81)
   at org.h2.tools.Recover.dumpMVStoreFile(Recover.java:593)
   at org.h2.tools.Recover.process(Recover.java:331)
   at org.h2.tools.Recover.runTool(Recover.java:192)
   at org.h2.tools.Recover.main(Recover.java:155)
$java-cp h2-1.4.182.jar org.h2.tools.Recover
线程“main”java.lang.IllegalStateException中的异常:未知标记50[1.4.182/6]
位于org.h2.mvstore.DataUtils.newIllegalStateException(DataUtils.java:762)
位于org.h2.mvstore.type.ObjectDataType.read(ObjectDataType.java:222)
位于org.h2.mvstore.db.TransactionStore$ArrayType.read(TransactionStore.java:1792)
位于org.h2.mvstore.db.TransactionStore$ArrayType.read(TransactionStore.java:1759)
位于org.h2.mvstore.Page.read(Page.java:843)
位于org.h2.mvstore.Page.read(Page.java:230)
位于org.h2.mvstore.mvstore.readPage(mvstore.java:1813)
位于org.h2.mvstore.MVMap.readPage(MVMap.java:769)
位于org.h2.mvstore.Page.getChildPage(Page.java:252)
位于org.h2.mvstore.MVMap.getFirstLast(MVMap.java:351)
位于org.h2.mvstore.MVMap.firstKey(MVMap.java:218)
位于org.h2.mvstore.db.TransactionStore.init(TransactionStore.java:169)
位于org.h2.mvstore.db.TransactionStore(TransactionStore.java:117)
位于org.h2.mvstore.db.TransactionStore(TransactionStore.java:81)
位于org.h2.tools.Recover.dumpMVStoreFile(Recover.java:593)
位于org.h2.tools.Recover.process(Recover.java:331)
位于org.h2.tools.Recover.runTool(Recover.java:192)
位于org.h2.tools.Recover.main(Recover.java:155)

我还注意到另外两个文件(.txt和.sql)已经创建,但它们似乎不包含数据。

我上周在JIRA数据库中遇到了同样的情况,我花了几个小时在google上搜索这个问题,但是,没有解决问题的答案

我决定看一看H2源代码,我可以用非常简单的代码恢复整个数据库。我可能不了解整个情况,例如根本原因、发生情况等。 但是,原因是:当您连接到h2文件时,h2引擎将查看auditLog并回滚正在进行的事务,存在一些类型未知(id为17)的数据,h2在识别类型(id为17)时由于异常而无法回滚

我的代码很简单,将h2 lib添加到构建路径中,然后手动连接到文件并清除auditLog,因为我认为它只是日志,不会有太大影响(有人可能会纠正我)。 希望你也能解决你的问题

public static void main(final String[] args) {
    // open the store (in-memory if fileName is null)
    final MVStore store = MVStore.open("C:\\temp\\h2db.mv.db");

    final MVMap<Object, Object> openMap = store.openMap("undoLog");

    openMap.clear();

    // close the store (this will persist changes)
    store.close();
}
publicstaticvoidmain(最终字符串[]args){
//打开存储(如果文件名为null,则在内存中)
最终MVStore存储=MVStore.open(“C:\\temp\\h2db.mv.db”);
最终MVMap openMap=store.openMap(“撤消日志”);
openMap.clear();
//关闭存储(这将保留更改)
store.close();
}

我遇到了类似的问题:

[HY000][50000] Allgemeiner Fehler: "java.lang.NullPointerException"
General error: "java.lang.NullPointerException" [50000-176]
java.lang.NullPointerException

我试图与IntelliJ连接到H2文件数据库。H2驱动程序版本为1.3.176,但DB文件版本为1.3.161。因此,在IntelliJ中将驱动程序降级到1.3.161,完全解决了问题。

此pro的另一个解决方案