資料庫二進制文件
『壹』 如何實現將文件以二進制形式存放到資料庫中
這個很簡單的,這要把表單
這樣設置一下,表單裡面的數據就是以二進制的形式傳到資料庫的,至於怎麼傳到資料庫,這個就不用說吧,一個sql插入語句就行了的,。
『貳』 如何從SQL資料庫中讀取二進制數據
讀出並生成圖片到物理位置
public void Read()
{
byte[] MyData = new byte[0];
using (SqlConnection conn = new SqlConnection(sqlconnstr))
{
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "select * from T_img";
SqlDataReader sdr = cmd.ExecuteReader();
sdr.Read();
MyData = (byte[])sdr["ImgFile"];//讀取第一個圖片的位流
int ArraySize= MyData.GetUpperBound(0);//獲得資料庫中存儲的位流數組的維度上限,用作讀取流的上限
FileStream fs = new FileStream(@"c:\00.jpg", FileMode.OpenOrCreate, FileAccess.Write);
fs.Write(MyData, 0, ArraySize);
fs.Close(); //-- 寫入到c:\00.jpg。
conn.Close();
Console.WriteLine("讀取成功");//查看硬碟上的文件
}
}
『叄』 老師,請問如何將資料庫中二進制流文件讀出
context.Response.ClearContent();
context.Response.ContentType = "image/Jpeg";
context.Response.BinaryWrite(資料庫讀出來的byte[]);
ms.Close();
ms = null;
image.Dispose();
image = null;
『肆』 資料庫中的二進制文件如何還原並保存
文件存庫裡面啊?那多佔空間啊!載入是很慢的!是不是圖片?
這里有個操作物理路徑下載的函數:
private void FileDown(string strPath)
{
System.IO.FileInfo file = new System.IO.FileInfo(strPath);
if (file.Exists)
{
Response.Clear();
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(file.FullName, System.Text.Encoding.UTF8));
Response.AddHeader("Content-Length", file.Length.ToString());
Response.ContentType = "application/octet-stream";
Response.Filter.Close();
Response.WriteFile(file.FullName);
Response.End();
}
else
{
ClientScript.RegisterStartupScript(GetType(), "", "<script language='javascript'>alert('文件不存在!');</script>");
}
}
如果是存取圖片的話:
存:
FileStream fs = new FileStream(FilePath, FileMode.OpenOrCreate, FileAccess.Write);
byte[] myData = new byte[fileStream.Length];
fileStream.Read(myData, 0, System.Convert.ToInt32(fileStream.Length));//從流中讀取位元組塊,並將數據寫入到該緩沖區
fileStream.Close();
...把mydata插入到資料庫就好勒!
取:
取出byte[]來,直接image.formStream(fs);
『伍』 只要我的資料庫二進制文件打開了,任何數據都可以恢復
最好重新查查備份的控制文件是否在正常。
只有在不完整恢復後或者重建控制文件後,才必須用resetlogs打開資料庫來重新初始化聯機日誌文件。(resetlogs指示Oracle初始化聯機重做日誌文件和重置日誌切換序列號。)
『陸』 如何將二進制文件存入Oracle資料庫中
先把文件讀取到內存,再以二進制格式保持到資料庫中的大欄位中(clob或clob)。
寫大對象。
Java code
public static void main(String[] args) {
// TODO Auto-generated method stub
Connection conn = null;
Statement stat = null;
ResultSet rs = null;
OutputStream os = null;
FileInputStream fis = null;
int bs = 0;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:oraDB","bigfou","---");
conn.setAutoCommit(false);
stat = conn.createStatement();
stat.executeUpdate("insert into t_video(id,video) values(1,empty_blob())");
rs = stat.executeQuery("select video from t_video where id = 1");
rs.next();
oracle.sql.BLOB blo = (oracle.sql.BLOB)rs.getBlob(1);
os = blo.getBinaryOutputStream();
bs = blo.getBufferSize();
fis = new FileInputStream("D:\\Temp\\MPlayer-CVS-20040808-K&K\\mplayer.exe");
byte[] buf = new byte[bs];
int length = 0;
while(true)
{
length = fis.read(buf);
if(length == -1) break;
os.write(buf,0,length);
}
os.close();
os = null;
fis.close();
fis = null;
conn.commit();
conn.setAutoCommit(true);
conn.close();
} catch(Exception ex) {
ex.printStackTrace();
}
}
讀大對象
Java code
InputStream is = null;
FileOutputStream fos = null;
byte[] buf = null;
int bs = 0;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:oraDB","bigfou","-");
conn.setAutoCommit(false);
stat = conn.createStatement();
rs = stat.executeQuery("select video from t_video where id = 1");
rs.next();
oracle.sql.BLOB blo = (oracle.sql.BLOB)rs.getBlob(1);
bs = blo.getBufferSize();
buf = new byte[bs];
int length = 0;
is = blo.getBinaryStream();
fos = new FileOutputStream("d:\\test.exe");
while(true) {
length = is.read(buf);
if(length == -1) break;
fos.write(buf,0,length);
}
fos.close();
fos = null;
is.close();
is = null;
conn.commit();
conn.setAutoCommit(true);
conn.close();
...
『柒』 怎樣讀取資料庫中存儲的二進制圖片文件
下面我們將示例一個圖片文件讀取存儲至資料庫並從資料庫中讀取圖片信息並顯示的案例:
1、首先讀取硬碟上的某一具體圖片文件,讀取模式設置為readBinary方式:
<cffile
action
=
"readBinary"
file
=
"temp
directory
here#file.serverFile#"
variable
=
"test">
2、將讀取出來的二進制內容存儲至資料庫中(註:資料庫欄位需設置成能存儲圖片類型的欄位,如blob類型):
<cfquery
datasource
=
"datasource">
insert
into
imageTest
values
(<cfqueryparam
cfsqltype="cf_sql_blob"
value="#test#">)
</cfquery>
通過1、2兩個步驟,我們輕松實現了讀取圖片文件並存儲至資料庫的操作過程。
3、從資料庫中讀取圖片信息,該文件可命名為dispImage.cfm:
<!---
在此需特別注意enablecfoutputonly的壓縮空白功能,如果不對該頁面進行空白壓縮,很可能會造成圖片無法顯示的問題
--->
<cfprocessingdirective
suppressWhiteSpace="yes">
<cfsetting
enablecfoutputonly="yes">
<!---
讀取相應的圖片信息
--->
<cfquery
datasource
=
"datasource">
select
image
from
imageTest
where
variable
here#
</cfquery>
<!---
設置瀏覽器輸出的格式,我們將它設置為圖片的JPG類型,用戶可根據實際情況改動類型設置
--->
<cfcontent
type="image/jpg">
<!---
輸出圖片
--->
<cfoutput>#toString(imageTest.image)#</cfoutput>
</cfprocessingdirective>
<cfabort>
4、顯示圖片內容,調用dispImage.cfm頁面:
<img
src
=
"dispImage.cfm?id=your
variable
here">
通過3、4兩個步驟,我們也很容易的就完成了從資料庫中讀取圖片信息並在頁面顯示的功能。
總結:實際上,除了圖片文件可以如此處理,其它的文件也能通過類似方式進行處理,可將任意文件類型存儲至資料庫,只是文件大小的原因以及資料庫存儲讀取速度性能限制,我們基本上還是不建議將文件存儲至資料庫,畢竟硬碟讀取要快得多。
『捌』 資料庫中二進制數據主要是用來存儲什麼數據的麻煩舉例說說
很多資料庫將存儲二進制的欄位都定義為BLOB類型,實際上它可以存儲任何數據類型,比如數字型或者是字元型,當然了,資料庫中已經有數字型和字元型自己的定義,所以我們一般也不會將這些數據存儲在BLOB中,在BLOB中最常存儲的數據是文件數據,原因是因為BLOB有個特點,那就是存入的數據長度不受什麼限制,明白了吧?如果你想保存一張圖片在資料庫中,那麼BLOB類型的欄位是你唯一的選擇。
『玖』 資料庫中存儲二進制文件的查詢效率問題
你所謂的二進制數據文件針對的應該是大對象,一般而言,不會使用到這種存儲方式。不過說查詢效率,在對大對象進行查詢時,像ORACLE,就是給數據文件增加了一個頭,用以查詢時的定位。而對於大數據的文本文件,比如CLOB,它提供了其他的方式讓你來進行數據查詢。而你所說的存在其他的欄位,那麼,如果你存儲的是文本文件而非音頻視頻的話,建議你採用CLOB而非BLOB……另外,就查詢效率而言,沒有什麼固定的方式是最好的,只有針對你的應用,採用最合適的資料庫架構才是最優的。在查詢效率這點上,建議你看看資料庫的簇集,索引,分區/多文件組(oracle是分區,sql server就是多文件組了),這些如果使用恰當的話,可以提高查詢效率……
『拾』 資料庫寫入磁碟的數據文件為什麼用二進制文件而不用文本文件
1.
這個和計算機的存儲有關系吧
2.
比如數字,在計算機的表示中,是以二進製表示的。二進制存儲節省
空間和時間
。
3.
資料庫本身有二進制類型的數據類型,這個以無法以文本存儲。