无法调用“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的close方法

java调用存储过程

java.sql.Connection createArrayOf() 总是返回 null

空对象引用上的 Android Studio jTDS java.lang.NullPointerException java.sql.Statement java.sql.Connection.cr

是否可以从 java.sql.Connection 获取 url 或服务器信息 [重复]

在多线程系统中使用静态 java.sql.Connection 实例是不是安全?