簡體   English   中英

如何將Java中的圖片保存為多個blob?

[英]How to save a picture in Java into Multiple blob?

正如我在標題中所描述的那樣,我嘗試使用InputStream多次訪問圖片文件,然后將其保存到blob類型數據庫,但結果為第二個,第三個,等等為null。 這是代碼的片段:

File image1 = new File("src/template1.png").getAbsoluteFile();
File image2 = new File("src/template2.png").getAbsoluteFile();
InputStream in1 = new FileInputStream(image1);
InputStream in2 = new FileInputStream(image2);
long length1 = image1.length();
long length2 = image2.length();
pstmt.setString(1, jTextField18.getText().toUpperCase());
pstmt.setBlob( 2, in1, length1 );
pstmt.setBlob( 3, in1, length1 );
pstmt.setBlob( 4, in1, length1 );
pstmt.setBlob( 5, in1, length1 );
pstmt.setBlob( 6, in1, length1 );
pstmt.setBlob( 7, in2, length2 );
Pstmt.setBlob( 8, in2, length2 );

然后結果是:

YR/21
[BLOB - 5.6 KiB]
[BLOB - 0 B]
[BLOB - 0 B]
[BLOB - 0 B]
[BLOB - 0 B]
[BLOB - 5.5 KiB]
[BLOB - 0 B]

我嘗試使用像這段代碼的新InputStream並發生了另一個錯誤。 它說:行大小太大(> 8126)。 將某些列更改為TEXT或BLOB或使用ROW_FORMAT = DINAMIC或ROW_FORMAT = COMPRESSED可能會有所幫助。 在當前行格式中,760字節的BLOB前綴以內聯方式存儲。

pstmt.setBlob( 2, in1, length1 );
image1 = new File("src/template1.png").getAbsoluteFile();
in1 = new FileInputStream(image1);
pstmt.setBlob( 3, in1, length1 );
image1 = new File("src/template1.png").getAbsoluteFile();
in1 = new FileInputStream(image1);
pstmt.setBlob( 4, in1, length1 );

我認為問題得到解決並轉變為另一個問題。 謝謝你的回答

第一個調用消耗流,后續調用不獲取數據。 每次調用都需要一個單獨的InputStream。

“有沒有辦法將圖片保存到多個blob?”

是的,但您的代碼僅適用於小圖片。 相反,有一個圖像的父引用和實際圖像的子代,它們將具有blob。 讓孩子們變小,只為每一個孩子保存一大塊圖像。

這將有助於您管理空間,並且更容易備份。

有關如何以塊的形式讀取文件的參考,請查看此處: http//www.javapractices.com/topic/TopicAction.do?Id = 245

使用讀取文件的while循環將圖像塊保存到數據庫。

保存文件可能是一個冗長的操作,因此您可以在父項上有一個標志,用於定義子項是否全部加載。 從而防止其他線程讀取不完整的圖像。

如果您使用的是MySQL,那么本教程將介紹如何讀取和寫入圖像:http: //zetcode.com/db/mysqljava/

玩得開心。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM