[英]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.