AspireDeveloper Asked:2022-08-21 20:27:32 +0000 UTC2022-08-21 20:27:32 +0000 UTC 2022-08-21 20:27:32 +0000 UTC 尝试创建任何数据库时,弹出此错误[关闭] 772 试图创建一个表来使用 jdbc + h2 但似乎无法弄清楚如何创建它 java sql 1 个回答 Voted Best Answer Михаил Ребров 2022-08-21T23:02:13Z2022-08-21T23:02:13Z 使用 H2 的特点 H2-的特点之一是工作模式in-memory。 这种模式实际上不需要在连接属性中指定任何内容并且非常容易配置,因此它最常在初学者开始时使用(这远非总是有意识地这样做)。 在in-memory模式下运行 H2 时,数据库存储在 RAM 中。 从上面可以看出,给定数据库的整个生命周期通常适合一次运行(除非另有说明)。那些。数据库在应用程序启动时创建,并在应用程序结束时完全删除。 因此,应用程序必须在每次启动时自行创建和初始化所有表。 通常,这用于自动化测试,当您需要重复恢复相同的数据库状态时。 因此,您在 IDE 控制台中看到的数据库和您的 Java 应用程序看到的数据库根本不是一回事。 因此,在这种情况下,在控制台中创建表并等待您的 Java 应用程序查看它们是没有意义的。 其他运行模式 H2 需要注意的是,in-memory这不是使用 H2 数据库的唯一模式。 在您的情况下,为简单起见,您可以尝试使用embedded-mode,其中数据不是存储在 RAM 中,而是存储在文件中。 对于这个数据库的正确操作,正确指定连接是极其重要的: 在主文件夹的磁盘上: jdbc:h2:~/dbname 在指定目录的磁盘上 jdbc:h2:./path/to/database 或者 jdbc:h2:file:/path/to/database 心里 jdbc:h2:mem:dbname 重要提示: 在 IDE 中指定与 Java 代码中相同的连接字符串。 建议参考 IDE 和应用程序都可以访问的特定文件。 添加外键时出错 执行以下表达式时发生错误: alter table Ingredient_Ref add foreign key (ingredient) references Ingredient(id); 错误说: [90057][90057]未找到 约束 “主键 | 唯一 (ID)” 在其中, H2清楚地发誓在该领域 (表)缺乏限制(unique或)。primary keyidIngredient 换句话说:一个字段Ingredient_Ref.ingredient不能引用Ingredient并且是一个外键,因为一个id表字段Ingredient 不能保证找到可以与指定值关联的单个行。那些。在您的情况下,可以在该表中插入几行带有值的行,id=1并且H2无法理解您的意思。 要纠正这种误解,您应该指定表Ingredient的主键。 ALTER TABLE Ingredient ADD PRIMARY KEY(ID); 在你尝试这个之前: alter table Ingredient_Ref add foreign key (ingredient) references Ingredient(id);
使用 H2 的特点
H2-的特点之一是工作模式
in-memory。这种模式实际上不需要在连接属性中指定任何内容并且非常容易配置,因此它最常在初学者开始时使用(这远非总是有意识地这样做)。
在
in-memory模式下运行 H2 时,数据库存储在 RAM 中。从上面可以看出,给定数据库的整个生命周期通常适合一次运行(除非另有说明)。那些。数据库在应用程序启动时创建,并在应用程序结束时完全删除。
因此,应用程序必须在每次启动时自行创建和初始化所有表。
通常,这用于自动化测试,当您需要重复恢复相同的数据库状态时。
因此,您在 IDE 控制台中看到的数据库和您的 Java 应用程序看到的数据库根本不是一回事。
因此,在这种情况下,在控制台中创建表并等待您的 Java 应用程序查看它们是没有意义的。
其他运行模式 H2
需要注意的是,
in-memory这不是使用 H2 数据库的唯一模式。在您的情况下,为简单起见,您可以尝试使用
embedded-mode,其中数据不是存储在 RAM 中,而是存储在文件中。对于这个数据库的正确操作,正确指定连接是极其重要的:
在主文件夹的磁盘上:
在指定目录的磁盘上
或者
心里
添加外键时出错
执行以下表达式时发生错误:
错误说:
在其中, H2清楚地发誓在该领域 (表)缺乏限制(
unique或)。primary keyidIngredient换句话说:一个字段
Ingredient_Ref.ingredient不能引用Ingredient并且是一个外键,因为一个id表字段Ingredient不能保证找到可以与指定值关联的单个行。那些。在您的情况下,可以在该表中插入几行带有值的行,id=1并且H2无法理解您的意思。要纠正这种误解,您应该指定表
Ingredient的主键。在你尝试这个之前: