gpt4 book ai didi

java - H2 文件模式,在现有文件数据库上打开新连接时出错

转载 作者:行者123 更新时间:2023-12-01 14:38:30 26 4
gpt4 key购买 nike

我正在尝试为文件创建 H2 DB。首先运行一个小模块来创建文件和架构并用数据填充其中。执行此操作时,使用的 H2 jdbc url:

jdbc:h2:file:c:\\Yogesh\\TestH2Db;MODE=Oracle;INIT=CREATE SCHEMA IF NOT EXISTS TEST\\;SET   SCHEMA TEST\\;

运行模式的 DDL 脚本,然后我使用 RunScript 类加载一些数据。加载后此模块停止(JVM 死亡/不再运行)。

第二个模块尝试使用此预先创建的数据来运行一些测试。要连接到此数据库,我尝试使用此网址:

jdbc:h2:file:c:\\Yogesh\\TestH2Db;IFEXISTS=TRUE;MODE=Oracle;INIT=CREATE SCHEMA IF NOT EXISTS TEST\\;SET   SCHEMA TEST\\;

基本相同的网址,但添加了 IFEXISTS=TRUE。基于此 URL 创建 JdbcConnectionPool。

protected JdbcConnectionPool initConnectionPool(String user, String pwd,
int maxConn, String jdbcUrl) {
System.setProperty("h2_jdbc_url", jdbcUrl);
JdbcConnectionPool connpool = JdbcConnectionPool.create(
jdbcUrl, user, pwd);
connpool.setMaxConnections(maxConn);
return connpool;

当模块的其余部分对上面创建的 JDBC 连接池执行 getConnection 时,它会失败,并且似乎再次创建了我在 Init 模块中创建的相同对象。

我已经尝试过没有 INIT=CREATE SCHEMA IF NOT EXISTS TEST\;SET SCHEMA TEST\;没有效果

编辑:添加堆栈跟踪

org.h2.jdbc.JdbcSQLException: Syntax error in SQL statement 
[Have a create view statement here that fails cant give out the SQL statement,
however note that this SQL statement ran fine
when i used RunScript tool to init the DB schema;
What i don't understand is while doing get connection the
connection Pool why are objects
being inited again, the Schema creation script is not part of the
INIT part of JDBC Url]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:329)
at org.h2.message.DbException.get(DbException.java:169)
at org.h2.message.DbException.getSyntaxError(DbException.java:194)
at org.h2.command.Parser.getSyntaxError(Parser.java:491)
at org.h2.command.Parser.read(Parser.java:2798)
at org.h2.command.Parser.readIfMore(Parser.java:809)
at org.h2.command.Parser.parseColumnList(Parser.java:778)
at org.h2.command.Parser.parseCreateView(Parser.java:4281)
at org.h2.command.Parser.parseCreate(Parser.java:3749)
at org.h2.command.Parser.parsePrepared(Parser.java:324)
at org.h2.command.Parser.parse(Parser.java:279)
at org.h2.command.Parser.parse(Parser.java:255)
at org.h2.command.Parser.prepare(Parser.java:201)
at org.h2.engine.Session.prepare(Session.java:388)
at org.h2.engine.Session.prepare(Session.java:375)
at org.h2.engine.MetaRecord.execute(MetaRecord.java:56)
at org.h2.engine.Database.open(Database.java:632)
at org.h2.engine.Database.openDatabase(Database.java:222)
at org.h2.engine.Database.<init>(Database.java:217)
at org.h2.engine.Engine.openSession(Engine.java:56)
at org.h2.engine.Engine.openSession(Engine.java:159)
at org.h2.engine.Engine.createSessionAndValidate(Engine.java:138)
at org.h2.engine.Engine.createSession(Engine.java:121)
at org.h2.engine.Engine.createSession(Engine.java:28)
at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:305)
at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:109)
at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:93)
at org.h2.Driver.connect(Driver.java:72)
at org.h2.jdbcx.JdbcDataSource.getJdbcConnection(JdbcDataSource.java:181)
at org.h2.jdbcx.JdbcDataSource.getXAConnection(JdbcDataSource.java:315)
at org.h2.jdbcx.JdbcDataSource.getPooledConnection(JdbcDataSource.java:341)
at org.h2.jdbcx.JdbcConnectionPool.getConnectionNow(JdbcConnectionPool.java:226)
at org.h2.jdbcx.JdbcConnectionPool.getConnection(JdbcConnectionPool.java:199)
at junit.db.utils.InitH2DB.getConnection(InitH2DB.java:45)
at test.DBLoader.DBLoader.main(DBLoader.java:21)

最佳答案

该错误是由于用于创建 H2 架构的脚本不正确造成的。有关更多详细信息,请参阅问题下方的评论。

关于java - H2 文件模式,在现有文件数据库上打开新连接时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16239724/

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