新聞中心
在實(shí)際開發(fā)中,我們有時需要將二進(jìn)制流存儲到數(shù)據(jù)庫中,例如將圖片、視頻等文件儲存到數(shù)據(jù)庫中。Java提供了多種儲存二進(jìn)制流的方式,下面將介紹如何利用Java進(jìn)行二進(jìn)制流儲存于數(shù)據(jù)庫中的操作。

網(wǎng)站建設(shè)公司,為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁設(shè)計(jì)及定制網(wǎng)站建設(shè)服務(wù),專注于企業(yè)網(wǎng)站制作,高端網(wǎng)頁制作,對服務(wù)器租用等多個行業(yè)擁有豐富的網(wǎng)站建設(shè)經(jīng)驗(yàn)的網(wǎng)站建設(shè)公司。專業(yè)網(wǎng)站設(shè)計(jì),網(wǎng)站優(yōu)化推廣哪家好,專業(yè)營銷推廣優(yōu)化,H5建站,響應(yīng)式網(wǎng)站。
1.利用JDBC API儲存二進(jìn)制流
JDBC API提供了儲存二進(jìn)制流的方法,可以通過執(zhí)行SQL語句完成二進(jìn)制流的儲存操作。
以下是Java通過JDBC API儲存二進(jìn)制流的樣例代碼:
“`java
try{
String url = “jdbc:mysql://localhost:3306/test”;
String user = “root”;
String password = “blog”;
Connection connection = DriverManager.getConnection(url, user, password);
String sql = “INSERT INTO image(id, data) VALUES(?, ?)”;
PreparedStatement statement = connection.prepareStatement(sql);
statement.setInt(1, 1);
File file = new File(“test.png”);
FileInputStream inputStream = new FileInputStream(file);
statement.setBinaryStream(2, inputStream, inputStream.avlable());
int result = statement.executeUpdate();
System.out.println(result);
statement.close();
connection.close();
}catch(Exception e){
e.printStackTrace();
}
“`
在該樣例中,我們先創(chuàng)建了一個新的數(shù)據(jù)連接`connection`,然后用`PreparedStatement`對象來執(zhí)行插入語句。在插入語句中,通過`setInt`方法設(shè)置ID,通過`setBinaryStream`方法設(shè)置二進(jìn)制流,并執(zhí)行SQL語句。
2. 利用Hibernate 儲存二進(jìn)制流
如果你使用Hibernate ORM框架,那么可以很方便地儲存二進(jìn)制流到數(shù)據(jù)庫中。Hibernate API內(nèi)置了對二進(jìn)制流數(shù)據(jù)類型的支持,只需要在實(shí)體類中添加`@Lob`注解即可。
以下是Hibernate ORM框架儲存二進(jìn)制流的樣例代碼:
“`java
@Entity
@Table(name = “image”)
public class Image{
@Id
private int id;
@Lob
private byte[] data;
// getters and setters
}
“`
在該實(shí)體類中,通過`@Lob`注解將屬性`data`設(shè)置成二進(jìn)制流類型,可以讓Hibernate自動將其映射到數(shù)據(jù)庫中的BLOB類型。這種方法不需要編寫SQL語句,插入數(shù)據(jù)時直接通過`session.save`方法實(shí)現(xiàn)即可。
3. 利用Spring JDBC 儲存二進(jìn)制流
Spring JDBC也提供了支持二進(jìn)制流儲存的API,通過JdbcTemplate對象可以完成二進(jìn)制流與數(shù)據(jù)庫的交互。
以下是Spring JDBC中儲存二進(jìn)制流的樣例代碼:
“`java
@Autowired
JdbcTemplate jdbcTemplate;
public void updateAvatar(int userId, InputStream avatar){
jdbcTemplate.update(
“UPDATE user SET avatar=? WHERE id=?”,
new Object[] { avatar, userId },
new int[] { Types.BLOB, Types.INTEGER }
);
}
“`
在該樣例中,我們通過`jdbcTemplate.update`更新語句將二進(jìn)制流寫入數(shù)據(jù)庫中,在更新參數(shù)中需要指定類型為BLOB。這種方法比較簡單,并且不需要編寫SQL語句。
:
以上就是Java如何儲存二進(jìn)制流于數(shù)據(jù)庫的操作,可以根據(jù)實(shí)際情況選擇適合自己的方法。無論是JDBC API、Hibernate ORM框架還是Spring JDBC,都提供了方便快捷的API讓我們可以很容易地儲存數(shù)據(jù)到數(shù)據(jù)庫中。深入理解這些API的使用方式,能夠大大提高Java在實(shí)際項(xiàng)目中的開發(fā)效率。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián),建站經(jīng)驗(yàn)豐富以策略為先導(dǎo)10多年以來專注數(shù)字化網(wǎng)站建設(shè),提供企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),響應(yīng)式網(wǎng)站制作,設(shè)計(jì)師量身打造品牌風(fēng)格,熱線:028-86922220Java怎么做到把圖片轉(zhuǎn)換成流存入數(shù)據(jù)庫,然后怎么再把圖片顯示出來。
oracle如下
數(shù)據(jù)庫中提供了兩種字段類型 Blob 和 Clob 用于存儲大型字符串或二進(jìn)制數(shù)據(jù)(如圖片)。
Blob 采用單數(shù)散字節(jié)存儲,適合保存二進(jìn)制數(shù)據(jù),如圖片文件。
Clob 采用多字節(jié)存儲,適合保存大型文本數(shù)據(jù)。
首先創(chuàng)建一橘枝個空 Blob/Clob 字段,再從這個空 Blob/Clob字段獲取游標(biāo),例如下面的代碼:
PreparedStatement ps = conn.prepareStatement( ” insert into PICTURE(image,resume) values(?,?) ” );
// 通過oralce.sql.BLOB/CLOB.empty_lob()構(gòu)造空Blob/Clob對象
ps.setBlob( 1 ,oracle.sql.BLOB.empty_lob());
ps.setClob( 2 ,oracle.sql.CLOB.empty_lob());
ps.excuteUpdate();
ps.close();
// 再次對讀出Blob/Clob句柄
ps = conn.prepareStatement( ” select image,resume from PICTURE where id=? for update ” );
ps.setInt( 1 , 100 );
ResultSet rs = ps.executeQuery();
rs.next();
oracle.sql.BLOB imgBlob = (oracle.sql.BLOB)rs.getBlob( 1 );
oracle.sql.CLOB resClob = (oracle.sql.CLOB)rs.getClob( 2 );
// 將二進(jìn)制數(shù)據(jù)寫入Blob
FileInputStream inStream = new FileInputStream( ” ” );
OutputStream outStream = imgBlob.getBinaryOutputStream();
byte buf = new byte ;
int len;
while (len = inStream.read(buf) > 0 ) {
outStream.write(buf, 0 ,len);
}
inStream.close();
outStream.cloese();
// 將字符串寫入Clob
resClob.putString( 1 , “圓畢敏 this is a clob ” );
// 再將Blob/Clob字段更新到數(shù)據(jù)庫
ps = conn.prepareStatement( ” update PICTURE set image=? and resume=? where id=? ” );
ps.setBlob( 1 ,imgBlob);
ps.setClob( 2 ,resClob);
ps.setInt( 3 , 100 );
ps.executeUpdate();
ps.close();
java : 一個excel文件以二進(jìn)制的形式存在數(shù)據(jù)庫中 如何將它導(dǎo)出并下載到本地
從數(shù)據(jù)庫中得到Blob/Clob,然蠢桐察后得到帶茄InputStream,直輪孫接給response.getOutputStream() 輸出就可以
關(guān)于java 如何將二進(jìn)制的流保存到數(shù)據(jù)庫的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
創(chuàng)新互聯(lián)【028-86922220】值得信賴的成都網(wǎng)站建設(shè)公司。多年持續(xù)為眾多企業(yè)提供成都網(wǎng)站建設(shè),成都品牌建站設(shè)計(jì),成都高端網(wǎng)站制作開發(fā),SEO優(yōu)化排名推廣服務(wù),全網(wǎng)營銷讓企業(yè)網(wǎng)站產(chǎn)生價(jià)值。
文章標(biāo)題:Java如何儲存二進(jìn)制流于數(shù)據(jù)庫?(java如何將二進(jìn)制的流保存到數(shù)據(jù)庫)
文章出自:http://www.dlmjj.cn/article/ccegoeh.html


咨詢
建站咨詢
