H2 db插入带引号的数据抛出异常

Posted

技术标签:

【中文标题】H2 db插入带引号的数据抛出异常【英文标题】:H2 db Inserting data with quotes throw exception 【发布时间】:2019-08-01 08:42:09 【问题描述】:

我正在尝试用内存 h2 数据库(mysql 模式)替换我的普通 msqldb 以进行单元测试。请看表格说明

'CREATE TABLE `dummyTable` (
  `id` int(11) NOT NULL,
  `value1` longtext,
`value2` longtext,
  PRIMARY KEY (`id`),
    ) ENGI

NE=InnoDB DEFAULT CHARSET=utf8'

然后我尝试插入带有 longtext 字段。在 mysql 中,我使用 \ 对其进行了转义,并且插入语句运行良好,但在 h2 db 中它会引发以下异常。

插入 dummyTable 值(6,'ad\'s', 'def')

org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "insert  into dummyTable values (6,'ad's','df[*]')"; SQL statement:
insert  into dummyTable values (6,'ad's','df') [42000-199]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:451)
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:427)
    at org.h2.message.DbException.get(DbException.java:205)
    at org.h2.message.DbException.get(DbException.java:181)
    at org.h2.message.DbException.getSyntaxError(DbException.java:229)
    at org.h2.command.Parser.getSyntaxError(Parser.java:989)
    at org.h2.command.Parser.checkRunOver(Parser.java:5129)

我尝试了另一个插入语句

插入 dummyTable 值(6,"ad\'s","df")

但它也因以下异常而失败

 org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "ad's" not found; SQL statement:
    insert  into dummyTable values (6,"ad's","df") [42122-199]
        at org.h2.message.DbException.getJdbcSQLException(DbException.java:451

)

有人可以请教如何在 h2 db 中做到这一点

【问题讨论】:

【参考方案1】:

我通过加倍单引号使其工作。

例如: 插入 dummyTable 值 (6,'ad''s', 'def')

这篇帖子Inserting a long text in H2 Database from an SQL script 有帮助

【讨论】:

如果您从数据库导出并且输入是用`定义的(例如:data),则会出现问题。这个也应该替换为 '

以上是关于H2 db插入带引号的数据抛出异常的主要内容,如果未能解决你的问题,请参考以下文章

H2 不保存价值,不抛出任何异常

如果一个线程写入和一个读取,H2 数据库开始抛出异常

HibernateSearch、JPA、H2驱动在数据库索引过程中抛出异常

当来自 db 的数据不好时是不是应该抛出异常?

本地 DB 抛出字节数组截断长度为 8000 的异常

使用 IBAction 插入数据抛出异常