當前位置:首頁 » 參考文獻 » byte資料庫

byte資料庫

發布時間: 2021-03-22 04:56:33

㈠ C#怎麼將byte[]存入到資料庫

1. 寫入資料庫

[c-sharp] view plainprint?
public static byte[] GetBytesByImage(PictureBox pb)
{
byte[] photo_byte= null;

if (!pb.Image.Equals(null))
{
using (MemoryStream ms = new MemoryStream())
{
Bitmap bmp = new Bitmap(pb.Image);
bmp.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);
photo_byte = new byte[ms.Length];
ms.Position = 0;
ms.Read(photo_byte, 0, Convert.ToInt32(ms.Length));
bmp.Dispose();
}
}

return photo_byte;
}

2.將實際位置中的照片轉化為byte[]類型寫入資料庫中;

[c-sharp] view plainprint?
public static byte[] GetBytesByImagePath(string strFile)
{
byte[] photo_byte = null;
using (FileStream fs = new FileStream(strFile, FileMode.Open, FileAccess.Read))
{
using (BinaryReader br = new BinaryReader(fs))
{
photo_byte = br.ReadBytes((int)fs.Length);
}
}

return photo_byte;
}

3. 讀取byte[]並轉化為圖片。
[c-sharp] view plainprint?
public static Image GetImageByBytes(byte[] bytes)
{
Image photo = null;
using (MemoryStream ms = new MemoryStream(bytes))
{
ms.Write(bytes, 0, bytes.Length);
photo = Image.FromStream(ms, true);
}

return photo;
}

㈡ oracle如何存儲byte類型數據

這個我其實也不大懂 不過以前在倉庫中存了這方面的一點小東東 希望對你游泳 嘿嘿 不知道是不是你想要的 先搞上來你看看吧

Oracle中的BLOB和CLOB

一、區別和定義

LONG: 可變長的字元串數據,最長2G,LONG具有VARCHAR2列的特性,可以存儲長文本一個表中最多一個LONG列

LONG RAW: 可變長二進制數據,最長2G

CLOB: 字元大對象Clob 用來存儲單位元組的字元數據

NCLOB: 用來存儲多位元組的字元數據

BLOB: 用於存儲二進制數據

BFILE: 存儲在文件中的二進制數據,這個文件中的數據只能被只讀訪。但該文件不包含在資料庫內。

bfile欄位實際的文件存儲在文件系統中,欄位中存儲的是文件定位指針.bfile對oracle來說是只讀的,也不參與事務性控制和數據恢復.

CLOB,NCLOB,BLOB都是內部的LOB(Large Object)類型,最長4G,沒有LONG只能有一列的限制

要保存圖片、文本文件、Word文件各自最好用哪種數據類型?

--BLOB最好,LONG RAW也不錯,但Long是oracle將要廢棄的類型,因此建議用BLOB。

二、操作

1、 get

CLOB

java 代碼

//獲得資料庫連接
Connection con = ConnectionFactory.getConnection();
con.setAutoCommit(false);
Statement st = con.createStatement();
//不需要「for update」
ResultSet rs = st.executeQuery("select CLOBATTR from TESTCLOB where ID=1");
if (rs.next())
{
java.sql.Clob clob = rs.getClob("CLOBATTR");
Reader inStream = clob.getCharacterStream();
char[] c = new char[(int) clob.length()];
inStream.read(c);
//data是讀出並需要返回的數據,類型是String
data = new String(c);
inStream.close();
}
inStream.close();
con.commit();
con.close();

BLOB

java 代碼

//獲得資料庫連接
Connection con = ConnectionFactory.getConnection();
con.setAutoCommit(false);
Statement st = con.createStatement();
//不需要「for update」
ResultSet rs = st.executeQuery("select BLOBATTR from TESTBLOB where ID=1");
if (rs.next())
{
java.sql.Blob blob = rs.getBlob("BLOBATTR");
InputStream inStream = blob.getBinaryStream();
//data是讀出並需要返回的數據,類型是byte[]
data = new byte[input.available()];
inStream.read(data);
inStream.close();
}
inStream.close();
con.commit();
con.close();

2、 put

CLOB

java 代碼

//獲得資料庫連接
Connection con = ConnectionFactory.getConnection();
con.setAutoCommit(false);
Statement st = con.createStatement();
//插入一個空對象empty_clob()
st.executeUpdate("insert into TESTCLOB (ID, NAME, CLOBATTR) values (1, "thename", empty_clob())");
//鎖定數據行進行更新,注意「for update」語句
ResultSet rs = st.executeQuery("select CLOBATTR from TESTCLOB where ID=1 for update");
if (rs.next())
{
//得到java.sql.Clob對象後強制轉換為oracle.sql.CLOB
oracle.sql.CLOB clob = (oracle.sql.CLOB) rs.getClob("CLOBATTR");
Writer outStream = clob.getCharacterOutputStream();
//data是傳入的字元串,定義:String data
char[] c = data.toCharArray();
outStream.write(c, 0, c.length);
}
outStream.flush();
outStream.close();
con.commit();
con.close();

BLOB

java 代碼

//獲得資料庫連接
Connection con = ConnectionFactory.getConnection();
con.setAutoCommit(false);
Statement st = con.createStatement();
//插入一個空對象empty_blob()
st.executeUpdate("insert into TESTBLOB (ID, NAME, BLOBATTR) values (1, "thename", empty_blob())");
//鎖定數據行進行更新,注意「for update」語句
ResultSet rs = st.executeQuery("select BLOBATTR from TESTBLOB where ID=1 for update");
if (rs.next())
{
//得到java.sql.Blob對象後強制轉換為oracle.sql.BLOB
oracle.sql.BLOB blob = (oracle.sql.BLOB) rs.getBlob("BLOBATTR");
OutputStream outStream = blob.getBinaryOutputStream();
//data是傳入的byte數組,定義:byte[] data
outStream.write(data, 0, data.length);
}
outStream.flush();
outStream.close();
con.commit();
con.close();

=======================================================================

厚厚發表於 2006年06月27日

網路上很多關於JAVA對Oracle中BLOB、CLOB類型欄位的操作說明,有的不夠全面,有的不夠准確,甚至有的簡直就是胡說八道。最近的項目正巧用到了這方面的知識,在這里做個總結。
環境:
Database: Oracle 9i
App Server: BEA Weblogic 8.14
表結構:
CREATE TABLE TESTBLOB (ID Int, NAME Varchar2(20), BLOBATTR Blob)
CREATE TABLE TESTBLOB (ID Int, NAME Varchar2(20), CLOBATTR Clob)
JAVA可以通過JDBC,也可以通過JNDI訪問並操作資料庫,這兩種方式的具體操作存在著一些差異,由於通過App Server的資料庫連接池JNDI獲得的資料庫連接提供的java.sql.Blob和java.sql.Clob實現類與JDBC方式提供的不同,因此在入庫操作的時候需要分別對待;出庫操作沒有這種差異,因此不用單獨對待。

一、BLOB操作
1、入庫
(1)JDBC方式
//通過JDBC獲得資料庫連接
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:testdb", "test", "test");
con.setAutoCommit(false);
Statement st = con.createStatement();
//插入一個空對象empty_blob()
st.executeUpdate("insert into TESTBLOB (ID, NAME, BLOBATTR) values (1, "thename", empty_blob())");
//鎖定數據行進行更新,注意「for update」語句
ResultSet rs = st.executeQuery("select BLOBATTR from TESTBLOB where ID=1 for update");
if (rs.next())
{
//得到java.sql.Blob對象後強制轉換為oracle.sql.BLOB
oracle.sql.BLOB blob = (oracle.sql.BLOB) rs.getBlob("BLOBATTR");
OutputStream outStream = blob.getBinaryOutputStream();
//data是傳入的byte數組,定義:byte[] data
outStream.write(data, 0, data.length);
}
outStream.flush();
outStream.close();
con.commit();
con.close();
(2)JNDI方式
//通過JNDI獲得資料庫連接
Context context = new InitialContext();
ds = (DataSource) context.lookup("ORA_JNDI");
Connection con = ds.getConnection();
con.setAutoCommit(false);
Statement st = con.createStatement();
//插入一個空對象empty_blob()
st.executeUpdate("insert into TESTBLOB (ID, NAME, BLOBATTR) values (1, "thename", empty_blob())");
//鎖定數據行進行更新,注意「for update」語句
ResultSet rs = st.executeQuery("select BLOBATTR from TESTBLOB where ID=1 for update");
if (rs.next())
{
//得到java.sql.Blob對象後強制轉換為weblogic.jdbc.vendor.oracle.OracleThinBlob(不同的App Server對應的可能會不同)
weblogic.jdbc.vendor.oracle.OracleThinBlob blob = (weblogic.jdbc.vendor.oracle.OracleThinBlob) rs.getBlob("BLOBATTR");
OutputStream outStream = blob.getBinaryOutputStream();
//data是傳入的byte數組,定義:byte[] data
outStream.write(data, 0, data.length);
}
outStream.flush();
outStream.close();
con.commit();
con.close();
2、出庫
//獲得資料庫連接
Connection con = ConnectionFactory.getConnection();
con.setAutoCommit(false);
Statement st = con.createStatement();
//不需要「for update」
ResultSet rs = st.executeQuery("select BLOBATTR from TESTBLOB where ID=1");
if (rs.next())
{
java.sql.Blob blob = rs.getBlob("BLOBATTR");
InputStream inStream = blob.getBinaryStream();
//data是讀出並需要返回的數據,類型是byte[]
data = new byte[input.available()];
inStream.read(data);
inStream.close();
}
inStream.close();
con.commit();
con.close();
二、CLOB操作
1、入庫
(1)JDBC方式
//通過JDBC獲得資料庫連接
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:testdb", "test", "test");
con.setAutoCommit(false);
Statement st = con.createStatement();
//插入一個空對象empty_clob()
st.executeUpdate("insert into TESTCLOB (ID, NAME, CLOBATTR) values (1, "thename", empty_clob())");
//鎖定數據行進行更新,注意「for update」語句
ResultSet rs = st.executeQuery("select CLOBATTR from TESTCLOB where ID=1 for update");
if (rs.next())
{
//得到java.sql.Clob對象後強制轉換為oracle.sql.CLOB
oracle.sql.CLOB clob = (oracle.sql.CLOB) rs.getClob("CLOBATTR");
Writer outStream = clob.getCharacterOutputStream();
//data是傳入的字元串,定義:String data
char[] c = data.toCharArray();
outStream.write(c, 0, c.length);
}
outStream.flush();
outStream.close();
con.commit();
con.close();
(2)JNDI方式
//通過JNDI獲得資料庫連接
Context context = new InitialContext();
ds = (DataSource) context.lookup("ORA_JNDI");
Connection con = ds.getConnection();
con.setAutoCommit(false);
Statement st = con.createStatement();
//插入一個空對象empty_clob()
st.executeUpdate("insert into TESTCLOB (ID, NAME, CLOBATTR) values (1, "thename", empty_clob())");
//鎖定數據行進行更新,注意「for update」語句
ResultSet rs = st.executeQuery("select CLOBATTR from TESTCLOB where ID=1 for update");
if (rs.next())
{
//得到java.sql.Clob對象後強制轉換為weblogic.jdbc.vendor.oracle.OracleThinClob(不同的App Server對應的可能會不同)
weblogic.jdbc.vendor.oracle.OracleThinClob clob = (weblogic.jdbc.vendor.oracle.OracleThinClob) rs.getClob("CLOBATTR");
Writer outStream = clob.getCharacterOutputStream();
//data是傳入的字元串,定義:String data
char[] c = data.toCharArray();
outStream.write(c, 0, c.length);
}
outStream.flush();
outStream.close();
con.commit();
con.close();
2、出庫
//獲得資料庫連接
Connection con = ConnectionFactory.getConnection();
con.setAutoCommit(false);
Statement st = con.createStatement();
//不需要「for update」
ResultSet rs = st.executeQuery("select CLOBATTR from TESTCLOB where ID=1");
if (rs.next())
{
java.sql.Clob clob = rs.getClob("CLOBATTR");
Reader inStream = clob.getCharacterStream();
char[] c = new char[(int) clob.length()];
inStream.read(c);
//data是讀出並需要返回的數據,類型是String
data = new String(c);
inStream.close();
}
inStream.close();
con.commit();
con.close();
需要注意的地方:
1、java.sql.Blob、oracle.sql.BLOB、weblogic.jdbc.vendor.oracle.OracleThinBlob幾種類型的區別
2、java.sql.Clob、oracle.sql.CLOB、weblogic.jdbc.vendor.oracle.OracleThinClob幾種類型的區別

㈢ 如何把一個位元組數組存到資料庫里,然後再讀出來

保存位元組數組到資料庫分兩步:
第一、利用FileInputStream.read(byte[])方法把內容讀取到byte[]數組中,比如圖片是由二進制數組成的,就可以定義為一個位元組數組。
第二、在資料庫中對應記錄欄位應該設置為blob類型,這樣就能夠順利保存了
事例代碼如下:
PreparedStatement stmt = connection.generatePreparedStatement("INSERT INTO ... ");
stmt.setBytes(1, yourByteArray);

其中,yourByteArray是你讀出來的字元數組。

㈣ byte[]存入oracle資料庫

讀取——
OracleLob clob = OracleLob.Null;
string sql_state = 你的select語句
OracleCommand command = new OracleCommand(sql_state, 你的連接);
OracleDataReader reader = command.ExecuteReader();
where (reader.Read())
{
byte[] buffer = (byte[])reader[你的欄位];
}
存入——
byte[] buffer = 你的byte[];
string sql_state = 你的insert語句
OracleCommand cmd = new OracleCommand(strUpdate, 你的連接);
cmd.Parameters.Add("XML", OracleType.Blob);
cmd.Parameters[0].Value = buffer;
cmd.ExecuteNonQuery();

㈤ C# winfrom 如何將byte 用sql語句加入資料庫

photo應該是一個一個添加的吧

下面是一個將圖片轉換為byte[],然後直接添加此參數

//實例化一個文件流,與寫入文件相關聯
FileStream fs = new FileStream(photoPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
//獲得位元組數組
byte[] photoData = new byte[fs.Length];
//開始寫入
fs.Read(photoData, 0, imgData.Length);
//關閉流
fs.Close();
……
//photo欄位在資料庫中為image類型(二進制數據)
cmd.Parameters.Add("@Photo", SqlDbType.Image).Value = photoData;
cmd.ExecuteNonQuery();

另外,你的sql語句也太復雜了,其實,即使是數字,在資料庫中也可以設置為varchar類型,如果數據是從textbox中添加的(textbox中的值是string類型),就不需要類型轉換了。

string sql = string.Format("insert into EM_Name values('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}',{9},{10})", pm.No, pm.Name, pm.Rfidone, pm.Rfidtwo, pm.Rfidthree,pm.Photo, pm.Sex, pm.Phone, pm.Pichi, pm.Type,pm.Group);

㈥ 如何將byte存入ORACLE資料庫

以java代碼為例:
try{
conn=this.getConnection();
conn.setAutoCommit(false);
java.sql.Statementst=conn.createStatement();
Stringsql1="insertintotest_image(test_id,image)values("123",empty_blob())";
System.out.println("--------->"+sql1);
Stringstl2="selectimagefromtest_imagewheretest_id='"+test.getId()+"'forupdate";
ResultSetrs=st.executeQuery(stl2);
OutputStreamoutStream=null;
if(rs.next())
{
oracle.sql.BLOBblob=(oracle.sql.BLOB)rs.getBlob("image");
outStream=blob.getBinaryOutputStream();
outStream.write(byte[],0,byte[].length);
}
outStream.flush();
outStream.close();
conn.commit();
conn.close();
}

㈦ 在java中如何把位元組數組存儲到資料庫

保存位元組數組到資料庫分兩步:
第一、利用FileInputStream.read(byte[])方法把內容讀取到byte[]數組中,比如圖片是回由二進制數組成的,就可以答定義為一個位元組數組。
第二、在資料庫中對應記錄欄位應該設置為blob類型,這樣就能夠順利保存了
事例代碼如下:
PreparedStatement stmt = connection.generatePreparedStatement("INSERT INTO ... ");
stmt.setBytes(1, yourByteArray);

其中,yourByteArray是你讀出來的字元數組。

熱點內容
塗鴉論文 發布:2021-03-31 13:04:48 瀏覽:698
手機資料庫應用 發布:2021-03-31 13:04:28 瀏覽:353
版面217 發布:2021-03-31 13:04:18 瀏覽:587
知網不查的資源 發布:2021-03-31 13:03:43 瀏覽:713
基金贖回參考 發布:2021-03-31 13:02:08 瀏覽:489
懸疑故事範文 發布:2021-03-31 13:02:07 瀏覽:87
做簡單的自我介紹範文 發布:2021-03-31 13:01:48 瀏覽:537
戰略地圖參考 發布:2021-03-31 13:01:09 瀏覽:463
收支模板 發布:2021-03-31 13:00:43 瀏覽:17
電氣學術會議 發布:2021-03-31 13:00:32 瀏覽:731