无法调用“java.sql.Connection.getMetaData()”,因为“<parameter2>”为空
Posted
技术标签:
【中文标题】无法调用“java.sql.Connection.getMetaData()”,因为“<parameter2>”为空【英文标题】:Cannot invoke "java.sql.Connection.getMetaData()" because "<parameter2>" is null 【发布时间】:2021-01-24 22:37:16 【问题描述】:您好,我正在使用 H2 数据库作为我在线学习的教程。
我下载了 H2 数据库 jar 文件并将其放入 lib 文件中,如下所示:
我还在我的项目结构中创建了一个库,如下所示:
要测试的主要代码:
public class Main
public static void main(String[] args) throws SQLException
// write your code here
Server.main();
System.out.println("DB Launched");
然后我创建了一个 db 文件夹 - 当我运行我的应用程序时,我在我的项目解决方案中为“JDBC url”输入了 DB 文件夹的路径。我按照课程的所有说明进行操作。
然后当我连接时出现以下错误(在网络应用程序中):
Cannot invoke "java.sql.Connection.getMetaData()" because "<parameter2>" is null
java.lang.NullPointerException: Cannot invoke "java.sql.Connection.getMetaData()" because "<parameter2>" is null
at org.h2.bnf.context.DbContents.readContents(DbContents.java:154)
at org.h2.server.web.WebApp.tables(WebApp.java:698)
at org.h2.server.web.WebApp.process(WebApp.java:225)
at org.h2.server.web.WebApp.processRequest(WebApp.java:170)
at org.h2.server.web.WebThread.process(WebThread.java:134)
at org.h2.server.web.WebThread.run(WebThread.java:90)
at java.base/java.lang.Thread.run(Thread.java:832)
我按照所有说明操作...我不知道为什么会出现此错误 - 我不知道我做错了什么。
谢谢,
tomkt,
【问题讨论】:
您似乎没有向我们展示相关代码。是您的代码调用getMetaData
,还是您调用了其他引发该错误的代码。或者您是说此“Web 应用程序”会发生此错误?是 H2 提供的 GUI,还是您正在运行的其他东西。投票结束,因为没有提供足够的信息来调试情况。
@BasilBourque 我不同意你的观点——我的应用程序中确实没有代码。我所做的只是配置库并调用'Server.main'。
你的目标是什么?您是否尝试将 H2 作为单独的数据库服务器运行?或者您是否尝试在您的应用中嵌入 H2?
@BasilBourque 我正在尝试将其嵌入到我的应用程序中。我正在关注 Pluralsight 上的 java 反射 API 课程。我按照作者的指示进行操作。我正在使用反射创建一个自定义的类似休眠的 ORM 映射器。但是除了“main”方法代码之外,我还没有编写任何代码。
我不是 H2 方面的专家,但我已将它用于演示和实验。嵌入时,当您使用数据库 URL 在 JDBC 中建立连接时,数据库引擎会自动启动并创建初始数据库文件。我已经在 Stack Overflow 上的许多示例中展示了这一点。您从哪里获得致电Server.main
的说明?我从未见过那个代码。
【参考方案1】:
不要删除开头的“jdbc:h2:”。我遵循相同的课程并发现了我的问题。只需更换 ~/test 部分。所以它应该看起来像“jdbc:h2:D:/...”
【讨论】:
什么的开头?除了他的班级路径C:\...
之外,我在他的问题中没有看到 URI。您是说他需要编辑库定义中的条目吗?【参考方案2】:
因为在课堂上他们要求你将文件名粘贴到H2控制台上的JDBC文件中,但他没有显示你需要留下前面的项目......
所以应该是 jdbc:h2:C:\你的文件路径
如果您在该字段的前面缺少 jdbc:h2,它将失败并显示您上面的消息 enter image description here
【讨论】:
以上是关于无法调用“java.sql.Connection.getMetaData()”,因为“<parameter2>”为空的主要内容,如果未能解决你的问题,请参考以下文章
java.sql.Connection createArrayOf() 总是返回 null
空对象引用上的 Android Studio jTDS java.lang.NullPointerException java.sql.Statement java.sql.Connection.cr