当前位置: 首页 > 知识库问答 >
问题:

无法在h2内存数据库中插入数据

凤棋
2023-03-14

我正在inMemory数据库中插入数据,当插入数据时,我得到了一个问题,

使用boot、JPA、H2db在内存中插入数据的示例程序

>

  • 创建Pojo并使用JPA注释进行注释

    >

  • 配置在app.prop:字符串url=jdbc:h2:~/test;db_close_on_exit=false

    在data.sql文件中添加了@table给定表

    为data.sql中提到的转换添加了@column名称。

    在哪里配置;在Springboot中db_close_on_exit=false

    波乔

    @Entity
    @Table(name = "exchange_value")
    public class CurrencyExchange {
        @Id
        private Long id;
        @Column(name = "currency_from")
        private String from;
        @Column(name = "currency_to")
        private String to;
        @Column(name = "conversion_multiple")
        private BigDecimal conversion;
        private int port;
    

    控制器

    @Autowired
        private Environment env;
        @GetMapping("/currency-exchange/from/{from}/to/{to}")
        public CurrencyExchange retriveCurrencyExchange(@PathVariable String from,@PathVariable String to)
        {
            CurrencyExchange currencyExchange = new CurrencyExchange(1000L, from, to, BigDecimal.valueOf(65));
            currencyExchange.setPort(Integer.parseInt(env.getProperty("local.server.port")));
            return currencyExchange;
    
        }
    }
    
    spring.application.name=currency-exchange-service
    server.port=8000
    
    spring.jpa.show-sql=true
    spring.h2.console.enabled=true
    
    data.sql file
    
    
    
     insert into exchange_value(id,currency_from,currency_to,conversion_multiple,port)
        values(1001,'USD','INR',65,0);
        insert into exchange_value(id,currency_from,currency_to,conversion_multiple,port)
        values(1002,'EUR','INR',75,0);
    
    Output: The data should be inserted into in-memory database while hitting the service. 
    

    错误原因:对名为'in memorydatabaseShutdownexecutor'的bean调用destroy方法失败:org.h2.jdbc.jdbcsqlnontransientconnectionException:数据库已经关闭(若要在VM关机时禁用自动关闭,请在db URL中添加“;db_close_on_exit=false”)[90121-199]org.springframework.beans.factory.beanCreationException:创建类路径资源中定义的名为'Entity ManagerFactory'的bean时出错嵌套异常是org.springframework.jdbc.datasource.init.scriptStatementFailedException:未能执行URL的SQL脚本语句#1[file://users/naresh/documents/workspace-sts-3.9.8.release/currency-exchange-service/target/classes/data.SQL]:插入到exchange_value(id,currency_from,currency_to,conversion_multiple,port)值嵌套异常是org.h2.jdbc.jdbcsqlsyntaxerrorexception:找不到表“exchange_value”;SQL语句:在exchange_value(id,currency_from,currency_to,conversion_multiple,port)中插入值(1001,'USD','INR',65,0)[42102-199]org.h2.jdbc.jdbcsqlsyntaxerrorexception:找不到表“exchange_value”;SQL语句:插入exchange_value(id,currency_from,currency_to,conversion_multiple,port)值(1001,'USD','INR',65,0)[42102-199]

  • 共有1个答案

    松秦斩
    2023-03-14

    改变

    String url = jdbc:h2:~/test;DB_CLOSE_ON_EXIT=FALSE
    

    spring.datasource.url: 'jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1'
    

    应用程序-属性

    Application.Properties

    spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1
    spring.datasource.driverClassName=org.h2.Driver
    spring.datasource.username=sa
    spring.datasource.password=
    spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
    
    
    # Enabling H2 Console
    spring.h2.console.enabled=true
    
    # Custom H2 Console URL
    spring.h2.console.path=/h2
    

    更新2

    是的,Spring Boot可以为您自动创建表,确保您有@Table(name=“tableName”)Spring.jpa.hibernate.ddl-auto=createSpring.jpa.hibernate.ddl-auto=update

    @Entity
    @Table(name="exchange_value")
    public class ExchangeValueEntity {
       //some fields
    }
    
    spring.jpa.hibernate.ddl-auto=create
    
     类似资料:
    • 事情是这样的 我不知道发生了什么,如果有人能帮忙,我会非常感激的。THX!

    • 问题内容: 我想初始化一个H2数据库,但是我不确定记录是否存在。如果它们不存在,我什么都不愿做,但是如果它们不存在,我想写默认值。 像这样的东西: 问题答案: 以下内容适用于MySQL,PostgreSQL和H2数据库:

    • 问题内容: 因此,我最近才开始学习有关数据库如何工作,如何使用SQL ect的知识。并决定开始在我的Java应用程序(特别是H2数据库)中实现嵌入式数据库,并且在我编写代码的计算机上似乎运行良好。 当我移到另一台计算机上继续进行编码时,我注意到,即使我移植了嵌入式数据库文件(h2-*。jar),我在第一台计算机上创建的所有准备好的表也不在第二台计算机上存在。我以某种方式先入为主,即通过数据库引擎生

    • 我是laravel的新手,当我使用单击函数提交表单时出现了一些问题。ajax jquery controller不会将数据保存到数据库,每次响应时都会使用整个html文件。请帮帮我。 关于标题的一些信息 请求URL:http://akshay.laravel/patient1?fname=asdknkl 状态代码:200 OK 远程地址:[::1]:80 推荐人策略:降级时无推荐人 缓存控制:无缓