在oracle中可以使用bolb字段類型進行二進制流的存儲

創(chuàng)新互聯(lián)是一家專業(yè)提供紅旗企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站建設(shè)、網(wǎng)站制作、H5開發(fā)、小程序制作等業(yè)務(wù)。10年已為紅旗眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)絡(luò)公司優(yōu)惠進行中。
Java代碼:
Oracle中插入圖片并顯示(用BLOB類型)
要在oracle里面存入圖片 用 blob類型
首先在數(shù)據(jù)庫里建立:
--連接到管理員
conn sys/tbsoft as sysdba;
--為scott用戶授權(quán)
grant create any directory to scott;
--回到scott用戶
conn scott/tiger;
--創(chuàng)建存儲圖片的表
CREATE TABLE IMAGE_LOB (T_ID VARCHAR2 (5) NOT NULL,T_IMAGE BLOB NOT NULL);
--創(chuàng)建存儲圖片的目錄
CREATE OR REPLACE DIRECTORY IMAGES AS 'C:\picture';
--在c:下自己建一個叫picture的文件夾
CREATE OR REPLACE PROCEDURE IMG_INSERT (TID VARCHAR2,FILENAME VARCHAR2) AS
F_LOB BFILE;--文件類型
B_LOB BLOB;
BEGIN
iNSERT INTO IMAGE_LOB (T_ID, T_IMAGE)
VALUES (TID,EMPTY_BLOB ()) RETURN T_IMAGE INTO B_LOB;
--插入空的blob
F_LOB:= BFILENAME ('IMAGES', FILENAME);
--獲取指定目錄下的文件
DBMS_LOB.FILEOPEN(F_LOB, DBMS_LOB.FILE_READONLY);
--以只讀的方式打開文件
DBMS_LOB.LOADFROMFILE (B_LOB, F_LOB,DBMS_LOB.GETLENGTH (F_LOB));
--傳遞對象
DBMS_LOB.FILECLOSE (F_LOB);
--關(guān)閉原始文件
COMMIT;
END;
/
--在C:\picture下放一張圖片1.gif
--將該圖片存入表
call IMG_INSERT('1','1.gif');
然后創(chuàng)建一個web項目 連接數(shù)據(jù)庫后 創(chuàng)建一個BlobDAO類 用來取出表中的blob類型圖片
Java代碼 收藏代碼
public class BlobDAO {
private static final BlobDAO instance = new BlobDAO();
private Connection conn = null;
private BlobDAO() {
}
public static BlobDAO getInstance() {
return instance;
}
private void initConn() {
conn = DBAccess.getInstance().getConn();
}
public byte[] getImage(String imgname) {
BufferedInputStream ins;//取得BLOB的IO流
byte[] bt = null;
initConn();
Blob bo = null;
PreparedStatement ps = null;
ResultSet rs = null;
String sql = "select T_IMAGE from IMAGE_LOB where t_id=?";
try {
ps = conn.prepareStatement(sql);
ps.setString(1, imgname);
rs = ps.executeQuery();
if (rs.next()) {
bo = rs.getBlob("T_IMAGE");
try {
ins = new BufferedInputStream(bo.getBinaryStream());
int bufferSize = (int) bo.length();//取得BLOB的長度
bt = new byte[bufferSize];
try {
ins.read(bt, 0, bufferSize);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//建立字節(jié)緩存
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
rs.close();
ps.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return bt;
}
}
在action里面調(diào)用getImage()方法并顯示圖片在頁面上
Java代碼 收藏代碼
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
BlobDAO blobDAO = BlobDAO.getInstance();
byte[] bs = blobDAO.getImage("1");
try {
response.getOutputStream().write(bs);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
添加圖片到數(shù)據(jù)庫
請在c盤下放入圖片--c:\\4.gif
Java代碼 收藏代碼
public void savaImg(String imgId) {
//傳的是存入數(shù)據(jù)庫圖片的id
initConn();
Statement st = null;
BLOB blob = null; //圖片類型
OutputStream outputStream = null; //輸出流
File file = null; //文件
InputStream inputStream = null; //輸入流
ResultSet rs = null;
try {
conn.setAutoCommit(false); //事物由程序員操作
st = conn.createStatement();
st.executeQuery("insert into IMAGE_LOB values('"+ imgId +"',empty_blob())");
rs = st.executeQuery("select T_IMAGE from IMAGE_LOB where t_id='"+ imgId +"' for update");
if (rs.next()) {
blob = (BLOB) rs.getBlob(1);
outputStream = blob.getBinaryOutputStream();
file = new File("c:\\4.gif");
inputStream = new FileInputStream(file);
byte[] b = new byte[blob.getBufferSize()];
int len = 0;
while ((len = inputStream.read(b)) != -1) {
System.out.println(len);
outputStream.write(b, 0, len);
}
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
inputStream.close();
outputStream.flush();
outputStream.close();
rs.close();
st.close();
conn.commit();
conn.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
LZ是想保存圖片路徑 還是想以2進制的形式把這個圖片保存到Oracle?
用clob類型。
你baidu一下 “向blob插入圖片” 會獲得好多結(jié)果,比如
將圖片插入到BLOB類型的字段中
建立一個表:create table a(a blob);
建立一個目錄:create directory tmp as 'e:\';
建立一個PL/SQL塊:
declare
b_file bfile;
b_lob blob;
begin
insert into a(a) values(empty_blob()) return a into b_lob;
--為了使PL/SQL編譯成功,必須先為該列插入一個empty_blob() 值,return a into b_lob將該列與一個blog類型的變量綁定在一起,以后只要為b_lob賦值,即等于將該值插入了表中。
b_file:=bfilename('tmp','filename.jpg');
--tmp是建立的文件所在的目錄,filename.jpg是文件名;將文件轉(zhuǎn)換為bfile類型
dbms_lob.open(b_file,dbms_lob.file_readonly);--將b_file 以只讀的方式打開
dbms_lob.loadfromfile(b_lob,b_file,dbms_lob.getlength(b_file));-- 將b_file中的內(nèi)容轉(zhuǎn)換到b_lob中
dbms_lob.close(b_file);
commit;
end;
文章題目:圖片如何加入oracle,圖片如何加入微信表情包
文章出自:http://chinadenli.net/article36/hshopg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、外貿(mào)建站、網(wǎng)站內(nèi)鏈、軟件開發(fā)、網(wǎng)站維護、品牌網(wǎng)站設(shè)計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)