H2 - 使用 SQL 语句“SELECT * FROM null T”访问链接表时出错

Posted

技术标签:

【中文标题】H2 - 使用 SQL 语句“SELECT * FROM null T”访问链接表时出错【英文标题】:H2 - Error accessing linked table with SQL statement "SELECT * FROM null T" 【发布时间】:2019-09-28 10:44:30 【问题描述】:

我尝试在我的 Java 应用程序中创建链接表。

Statement stmtH2 = DBconnect.connH2.createStatement()
String linkedTable = ("CREATE LINKED TABLE tableName('', 'jdbc:mysql://localhost:3306/DBname', 'root', '', 'tableName');";
stmtH2.execute(linkedTable)

String query = "SELECT * FROM tableName WHERE Sex = 'F' ORDER BY Cod";
stmtH2.executeUpdate(query);

在 Java 中我遇到了这个错误:

org.h2.jdbc.JdbcSQLException: Column "COD" not found; SQL statement:

当我尝试在 localhost:8082 中查看运行 SELECT * FROM tableName 的表时,出现错误:

Error accessing linked table with SQL statement "SELECT * FROM null T", cause: "org.h2.jdbc.JdbcSQLException: Class ""com.mysql.jdbc.Driver"" not found [90086-175]"; SQL statement:
SELECT * FROM tableName [90111-175] 90111/90111 (Help)

为什么找不到“COD”列?

【问题讨论】:

Error accessing linked table with SQL statement "SELECT * FROM null T" -> 在 Java 应用程序中看到 NULL 总是很可疑......我建议分享更多 Java 和 MySQL/h2 代码.. 我编辑了添加细节的问题 【参考方案1】:

您的应用程序缺少com.mysql.jdbc.Driver。将其添加到应用程序的类路径中。

【讨论】:

我在类路径中找到了它,因为我还有其他可用的语句 错误信息明确指出H2的classpath中没有com.mysql.jdbc.Driver。如果您使用 H2 服务器,则需要将此驱动程序添加到其类路径中。 H2 1.3.175 也很旧,你不应该使用它。使用一些最新版本,例如 1.4.199。注意:需要将旧数据库导出到 1.3.175 中的 SQL 脚本并在 1.4.199 中新的空数据库中执行,旧版 PageStore 数据库的自动迁移并不总是正常工作。 正如我在之前的评论中所说,我在类路径中有 Driver,因为我的应用程序中还有其他语句可以创建链接表,然后从这些链接表中进行选择。与缺少驱动程序相关的错误发生在 H2 控制台中。在我的应用程序中出现了 SQLException。我在我的应用程序中有类似的选择语句,但使用不同的表并且它们可以工作。只有表tableName 不起作用。 您是否也从 H2 控制台创建了其他表?你的CREATE LINKED TABLE 命令到底长什么样?什么是完整的堆栈跟踪(您需要单击错误消息才能打开它)? 您需要使用带引号的名称(用双引号括起来),例如 "Cod""Sex" 来访问名称中包含小写字符的列。 H2 的最新版本将链接表的列名从 MySQL 转换为大写以避免此类问题,但您使用的是旧版本。

以上是关于H2 - 使用 SQL 语句“SELECT * FROM null T”访问链接表时出错的主要内容,如果未能解决你的问题,请参考以下文章

org.h2.jdbc.JdbcSQLException:未知数据类型:“DATEADD”; SQL 语句

如何通过 1 条 sql 语句为 H2 数据库删除和添加多个约束

H2 - 使用 SQL 语句“SELECT * FROM null T”访问链接表时出错

org.h2.jdbc.JdbcSQLSyntaxErrorException:SQL 语句“CREATE[*] SCHEMA DATABASE”中的语法错误; SQL 语句:

获取“org.h2.jdbc.JdbcSQLException:找不到表“BOOK_PUBLISHERS”;SQL 语句:”

H2 列名选择返回不正确的列名; “未找到列“OUT_ID”;SQL 语句:”