gpt4 book ai didi

java - 内存数据库中的 H2 在列名和我想要使用的值之间变得困惑

转载 作者:行者123 更新时间:2023-12-02 10:09:49 25 4
gpt4 key购买 nike

上下文:尝试测试 Spring Boot 应用程序,尝试通过 src/test/resources/目录中的 data.sql 文件初始化数据

我的内存数据库中有以下内容:

spring.datasource.url=jdbc:h2:mem:db;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;

我还有以下 SQL 表:

CREATE TABLE `roles` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(60) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `UK_nb4h0p6txrmfc0xbrd1kglp9t` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

这是我的插入语句(在 data.sql 中)

INSERT INTO roles(name) VALUES ("ROLE_USER");

当我运行 spring 单元测试时,出现此错误:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Initialization of bean failed; nested exception is org.springframework.jdbc.datasource.init.ScriptStatementFailedException: Failed to execute SQL script statement #2 of URL [file:/Users/me/IdeaProjects/proj/out/test/resources/data.sql]: INSERT INTO roles(name) VALUES ("ROLE_USER"); nested exception is org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "ROLE_USER" not found; SQL statement:
INSERT INTO roles(name) VALUES ("ROLE_USER") [42122-198]

对我来说,一切看起来都是正确的...我正在使用一个简单的插入语句,在一个肯定存在的表上...并且我正在插入一个与列定义很好对应的值。但由于某种原因,它会抛出错误,指出列“ROLE_USER”不存在,我不确定为什么。

最佳答案

啊!我找到了解决方案 - 事实证明 SQL 语句需要单引号来表示值...所以正确的方法是:

INSERT INTO roles(name) VALUES ('ROLE_USER');

而不是:

INSERT INTO roles(name) VALUES ("ROLE_USER");

关于java - 内存数据库中的 H2 在列名和我想要使用的值之间变得困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55078050/

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