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