繁体   English   中英

将BLOB从文件插入到SQL脚本中以嵌入H2数据库

[英]Insert BLOB from a file into a sql script to embed H2 database

我正在创建一个SQL脚本来创建一个新的架构,并将一些值插入到嵌入式H2数据库中,以与Spring Boot应用程序中的集成测试一起使用。 我需要插入的值之一是sql表上的BLOB字段。

我已经成功地使用了FILE_READ所描述的功能在这里

INSERT INTO MY_TABLE(ID, NAME, LOGO) 
VALUES('1', 'test1', FILE_READ('C:/myproject/logo.png'));

该功能在完整路径下效果很好,但是我无法在相对路径下做到这一点。 当在除我的以外的任何其他机器上下载和编译源代码(以及进行测试)时,这将无法正常工作。

我需要将二进制文件中的BLOB字段插入到SQL脚本中,该二进制文件是从拥有该脚本的项目的相对路径中加载的。

我搜索并找到了这个方法: 通过sql脚本插入BLOB? 但是RAWTOHEX函数似乎适用于Strings,而我的输入是一个二进制文件。

有任何想法吗?

FILE_READ文档中:

支持文件名和URL。 要从类路径读取流,请使用前缀类路径:

似乎无法使用相对路径; 那么可能的解决方案是在classpath包含具有所需二进制内容的文件,并使用FILE_READ classpath:对其进行访问。 这样,您可以将其部署在任何其他计算机上,而不必担心绝对路径。

通过使用RunScript代码

因此,如果在执行测试之前,通过使用类似以下代码的代码来设置运行脚本的数据库:

RunScript.execute(conn, new FileReader("yourScript.sql"));

然后以这种方式将logo.png添加为项目的资源,您可以在脚本中使用classpath:来引用它classpath:表示法: FILE_READ('classpath:/your/package/resource/logo.png')

从命令行工具使用RunScript

如果使用命令行工具,则可以创建一个.jar来打包资源,例如resource.jar并将其添加到cmd中的classpath中:

java -cp h2*.jar;resource.jar org.h2.tools.RunScript -url jdbc:h2:~/test -script yourScript.sql

然后,与脚本中的前一种情况一样,您可以使用FILE_READ('classpath:/your/package/resource/logo.png')引用二进制文件。

希望能帮助到你,

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM