将文件中的 BLOB 插入 sql 脚本以嵌入 H2 数据库
Insert BLOB from a file into a sql script to embed H2 database
我正在创建一个 SQL 脚本来创建一个新模式并将一些值插入到嵌入的 H2 数据库中,以便在 Spring 启动应用程序中用于集成测试。我需要插入的值之一是 sql table.
上的 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 脚本来创建一个新模式并将一些值插入到嵌入的 H2 数据库中,以便在 Spring 启动应用程序中用于集成测试。我需要插入的值之一是 sql table.
上的 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')
希望对您有所帮助,