簡體   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