gpt4 book ai didi

sql - 将文件中的 BLOB 插入到 sql 脚本中以嵌入 H2 数据库

转载 作者:搜寻专家 更新时间:2023-10-30 22:35:19 24 4
gpt4 key购买 nike

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

我已成功使用 FILE_READ 函数,如 here 所述.

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

该函数适用于完整路径,但我无法使用相对路径。当在除我以外的任何其他机器上下载和编译(加上测试)源代码时,这种方法效果不佳。

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

我搜索并找到了这个方法:insert a BLOB via a sql script?但是 RAWTOHEX 函数似乎可以处理字符串,而我的输入是一个二进制文件。

有什么想法吗?

最佳答案

来自 FILE_READ文档:

File names and URLs are supported. To read a stream from the classpath, use the prefix classpath:

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

通过代码使用 RunScript

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

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

然后将 logo.png 添加为项目的资源,这样您就可以使用 classpath: 符号在脚本中引用它:FILE_READ('classpath :/your/package/resource/logo.png').

从命令行工具使用 RunScript

如果您使用命令行工具,您可以创建一个.jar 来打包您的资源,例如resource.jar 并将其添加到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')

引用您的二进制文件

希望对你有帮助

关于sql - 将文件中的 BLOB 插入到 sql 脚本中以嵌入 H2 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38353487/

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