新聞中心
在現(xiàn)代的軟件系統(tǒng)中,數(shù)據(jù)庫(kù)是至關(guān)重要的組成部分。它們用于存儲(chǔ)和檢索數(shù)據(jù),支持公司和組織的關(guān)鍵任務(wù)。與傳統(tǒng)的文本和數(shù)字?jǐn)?shù)據(jù)類型不同,二進(jìn)制數(shù)據(jù)類型(例如圖像和音頻文件)需要特殊處理才能在數(shù)據(jù)庫(kù)中存儲(chǔ)和讀取。在本教程中,我們將介紹使用C語(yǔ)言將二進(jìn)制流寫入數(shù)據(jù)庫(kù)的方法。

10年的岳麓網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。網(wǎng)絡(luò)營(yíng)銷推廣的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整岳麓建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)公司從事“岳麓網(wǎng)站設(shè)計(jì)”,“岳麓網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
一、選擇合適的數(shù)據(jù)庫(kù)類型
確定要使用的數(shù)據(jù)庫(kù)類型。這將有助于您選擇適當(dāng)?shù)膸?kù)和工具。在本教程中,我們將討論使用MySQL數(shù)據(jù)庫(kù)的C語(yǔ)言編程。MySQL是一種流行的客戶端/服務(wù)器數(shù)據(jù)庫(kù)管理系統(tǒng),具有卓越的性能和可擴(kuò)展性。
二、準(zhǔn)備你的代碼
在您開始編寫代碼之前,您需要先定義二進(jìn)制數(shù)據(jù)類型的存儲(chǔ)位置和大小??梢允褂媚腗ySQL安裝程序提供的MySQL Workbench。這將允許您輕松地創(chuàng)建和管理數(shù)據(jù)庫(kù),定義表和列以及在表中添加數(shù)據(jù)。在我們的示例代碼中,我們使用以下代碼定義包含二進(jìn)制數(shù)據(jù)的表:
“`
CREATE TABLE `binary_files` (
`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`filename` VARCHAR(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT ”,
`mime_type` VARCHAR(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT ”,
`data` LONGBLOB NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
“`
三、編寫代碼以讀取二進(jìn)制數(shù)據(jù)
一旦您確定了數(shù)據(jù)庫(kù)和表結(jié)構(gòu),您將可以編寫代碼。接下來,我們將介紹如何使用C語(yǔ)言編寫代碼以讀取二進(jìn)制數(shù)據(jù),并將其寫入表中創(chuàng)建的列。
步驟1:
使用mysql_init()函數(shù)初始化MySQL句柄。該句柄允許C語(yǔ)言程序與MySQL交互。
“`
MYSQL* mysql = mysql_init(NULL);
“`
步驟2:
使用mysql_real_connect()函數(shù)建立到數(shù)據(jù)庫(kù)的連接。此函數(shù)使用數(shù)據(jù)庫(kù)的名稱、用戶名和密碼作為參數(shù)。
“`
mysql_real_connect(mysql, “l(fā)ocalhost”, “user”, “password”, “database”, 0, NULL, 0);
“`
步驟3:
使用fopen()函數(shù)打開要讀取的二進(jìn)制文件。
“`
FILE* file = fopen(“image.jpg”, “rb”);
“`
步驟4:
使用fread()函數(shù)從文件中讀取數(shù)據(jù)。
“`
fread(buffer, 1, 1024, file);
“`
步驟5:
使用mysql_real_escape_string()函數(shù)將讀取的數(shù)據(jù)轉(zhuǎn)義,然后使用mysql_query()函數(shù)將它們寫入數(shù)據(jù)庫(kù)表中的指定列。
“`
char* escaped_data = malloc((1024 * 2) + 1);
mysql_real_escape_string(mysql, escaped_data, buffer, 1024);
char* query = “INSERT INTO binary_files (filename, mime_type, data) VALUES(‘image.jpg’, ‘image/jpeg’, ‘%s’)”;
char* escaped_query = calloc(strlen(query) + (1024 * 2) + 1, sizeof(char));
sprintf(escaped_query, query, escaped_data);
mysql_query(mysql, escaped_query);
“`
步驟6:
使用fclose()函數(shù)關(guān)閉打開的文件。
“`
fclose(file);
“`
四、
本教程介紹了使用C語(yǔ)言將二進(jìn)制流寫入數(shù)據(jù)庫(kù)的步驟。這是一個(gè)重要的主題,因?yàn)槎M(jìn)制數(shù)據(jù)類型在現(xiàn)代軟件系統(tǒng)中越來越常見。使用MySQL和C語(yǔ)言編程的示例代碼可以幫助您了解如何實(shí)現(xiàn)這一目標(biāo)。無論您是新手還是經(jīng)驗(yàn)豐富的開發(fā)人員,我們希望這個(gè)教程都能為您提供有用的信息。
成都網(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-86922220.net怎樣將圖片以二進(jìn)制流的方式存入Oracle數(shù)據(jù)庫(kù)里 在以二進(jìn)制流的方式讀取顯示 求源碼
在oracle中可以使用bolb字段類型進(jìn)行二進(jìn)制流的存儲(chǔ)
Java代碼:
Oracle中插入圖片并顯示(用BLOB類型)
要在oracle里面銀正模存入圖片 用 blob類型
首先在數(shù)據(jù)庫(kù)里建立:
–連接到管理員
conn sys/tbsoft as sysdba;
–為scott用戶授權(quán)
grant create any directory to scott;
–回到scott用戶
conn scott/tiger;
–創(chuàng)建存儲(chǔ)圖片的表
CREATE TABLE IMAGE_LOB (T_ID VARCHAR2 (5) NOT NULL,T_IMAGE BLOB NOT NULL);
–創(chuàng)建存儲(chǔ)圖片的目錄
CREATE OR REPLACE DIRECTORY IMAGES AS ‘C:\picture’;
–在c:下自己建一個(gè)叫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_READON);
–以只讀的方式打開文件
DBMS_LOB.LOADFROMFILE (B_LOB, F_LOB,DBMS_LOB.GETLENGTH (F_LOB));
–傳遞對(duì)象
DBMS_LOB.FILECLOSE (F_LOB);
–關(guān)閉原始文件
COMMIT;
END;
/
–在C:\picture下放一張圖片1.gif
–將該圖片存入表
call IMG_INSERT(‘1′,’1.gif’);
然后創(chuàng)清悔建一個(gè)web項(xiàng)目 連接數(shù)據(jù)庫(kù)后 創(chuàng)建一個(gè)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的長(zhǎng)度
bt = new byte;
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()方法并顯示圖片在頁(yè)面上
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ù)庫(kù)
請(qǐng)?jiān)赾盤下放入圖片–c:\\4.gif
Java代碼 收藏代碼
public void savaImg(String imgId) {
//傳的是存入數(shù)據(jù)庫(kù)圖片的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;
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();
}
}
c 將二進(jìn)制流寫入數(shù)據(jù)庫(kù)的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于c 將二進(jìn)制流寫入數(shù)據(jù)庫(kù),C語(yǔ)言教程:將二進(jìn)制流寫入數(shù)據(jù)庫(kù)的方法,.net怎樣將圖片以二進(jìn)制流的方式存入Oracle數(shù)據(jù)庫(kù)里 在以二進(jìn)制流的方式讀取顯示 求源碼的信息別忘了在本站進(jì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íng)銷讓企業(yè)網(wǎng)站產(chǎn)生價(jià)值。
本文題目:C語(yǔ)言教程:將二進(jìn)制流寫入數(shù)據(jù)庫(kù)的方法(c將二進(jìn)制流寫入數(shù)據(jù)庫(kù))
當(dāng)前地址:http://fisionsoft.com.cn/article/cdoiedp.html


咨詢
建站咨詢
