新聞中心
隨著互聯(lián)網(wǎng)的發(fā)展,數(shù)據(jù)存儲(chǔ)和管理已經(jīng)變得越來(lái)越重要。在實(shí)際開(kāi)發(fā)中,有時(shí)需要將圖片存入數(shù)據(jù)庫(kù)中,以便于管理和使用。本文將介紹。

創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括肇州網(wǎng)站建設(shè)、肇州網(wǎng)站制作、肇州網(wǎng)頁(yè)制作以及肇州網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,肇州網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到肇州省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
1. 準(zhǔn)備工作
在開(kāi)始之前,我們需要安裝mysql數(shù)據(jù)庫(kù)和相關(guān)驅(qū)動(dòng)程序。此外,我們還需要一個(gè)c語(yǔ)言開(kāi)發(fā)環(huán)境,如Visual Studio或Code::Blocks。
2. 創(chuàng)建數(shù)據(jù)庫(kù)表格
我們需要?jiǎng)?chuàng)建一個(gè)用于存儲(chǔ)圖片的數(shù)據(jù)庫(kù)表格??梢允褂胢ysql命令行工具或任何mysql客戶端來(lái)完成此操作。
下面是創(chuàng)建數(shù)據(jù)庫(kù)表格的示例代碼:
CREATE TABLE images (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
data LONGBLOB
);
該表格包含三列:id、name和data。id列是自動(dòng)遞增的主鍵,用于唯一標(biāo)識(shí)每個(gè)記錄。name列用于存儲(chǔ)圖片的名稱,data列用于存儲(chǔ)圖片的內(nèi)容。我們使用LONGBLOB類型來(lái)存儲(chǔ)二進(jìn)制數(shù)據(jù)。
3. 讀取圖片數(shù)據(jù)
在將圖片存入數(shù)據(jù)庫(kù)之前,我們需要從文件中讀取圖片數(shù)據(jù)。我們可以使用c語(yǔ)言中的文件I/O函數(shù)來(lái)完成此操作。
下面是讀取圖片數(shù)據(jù)的示例代碼:
FILE *fp;
char *buffer;
long fileLen;
fp = fopen(“sample.jpg”, “rb”);
if (!fp) {
fprintf(stderr, “Unable to open file.\n”);
exit(1);
}
fseek(fp, 0, SEEK_END);
fileLen = ftell(fp);
fseek(fp, 0, SEEK_SET);
buffer = (char *)malloc(fileLen + 1);
if (!buffer) {
fprintf(stderr, “Memory error.\n”);
exit(2);
}
fread(buffer, fileLen, 1, fp);
fclose(fp);
在上面的代碼中,我們打開(kāi)一個(gè)名為sample.jpg的文件,并使用fread函數(shù)將其內(nèi)容讀入內(nèi)存中的緩沖區(qū)中。我們使用malloc函數(shù)來(lái)分配足夠的內(nèi)存來(lái)存儲(chǔ)整個(gè)文件,然后在讀取文件后將文件指針關(guān)閉。
4. 將圖片數(shù)據(jù)存入數(shù)據(jù)庫(kù)
我們可以使用mysql C API來(lái)將讀取的圖片數(shù)據(jù)存入數(shù)據(jù)庫(kù)中。該API包含一組函數(shù),為開(kāi)發(fā)人員提供了與mysql數(shù)據(jù)庫(kù)進(jìn)行交互的方法。
下面是將圖片數(shù)據(jù)存入數(shù)據(jù)庫(kù)的示例代碼:
MYSQL *conn;
MYSQL_RES *res;
MYSQL_ROW row;
conn = mysql_init(NULL);
if (!mysql_real_connect(conn, “l(fā)ocalhost”, “username”, “password”, “database”, 0, NULL, 0)) {
fprintf(stderr, “%s\n”, mysql_error(conn));
exit(1);
}
mysql_query(conn, “set names utf8”);
mysql_query(conn, “START TRANSACTION”);
char *query;
query = (char *)malloc(5000 * sizeof(char));
sprintf(query, “INSERT INTO images(name, data) VALUES(‘%s’, ‘%s’)”,
“sample.jpg”, buffer);
if (mysql_query(conn, query)) {
fprintf(stderr, “%s\n”, mysql_error(conn));
mysql_query(conn, “ROLLBACK”);
exit(1);
} else {
mysql_query(conn, “COMMIT”);
printf(“Successfully Inserted\n”);
}
mysql_close(conn);
在上面的代碼中,我們首先使用mysql_init函數(shù)初始化mysql連接句柄。然后,我們使用mysql_real_connect函數(shù)建立與數(shù)據(jù)庫(kù)的連接。我們使用malloc函數(shù)分配足夠的內(nèi)存來(lái)存儲(chǔ)INSERT查詢。接下來(lái),我們將查詢字符串組裝起來(lái)并使用mysql_query函數(shù)執(zhí)行它。我們使用mysql_close函數(shù)關(guān)閉數(shù)據(jù)庫(kù)連接。
5. 結(jié)論
在本文中,我們介紹了。我們討論了如何創(chuàng)建數(shù)據(jù)庫(kù)表格、如何讀取圖片數(shù)據(jù)以及如何使用mysql C API將數(shù)據(jù)存入數(shù)據(jù)庫(kù)中。希望這篇文章對(duì)正在尋找此類解決方案的開(kāi)發(fā)人員有所幫助。
相關(guān)問(wèn)題拓展閱讀:
- 圖片如何存入數(shù)據(jù)庫(kù)?
圖片如何存入數(shù)據(jù)庫(kù)?
通常對(duì)用戶上傳的圖片需要保存到數(shù)據(jù)庫(kù)中。解決方法一般有兩種:一種是將圖片保存的路徑存儲(chǔ)到數(shù)據(jù)庫(kù);另一種是將圖片以二進(jìn)制數(shù)據(jù)流的形式直接寫(xiě)入數(shù)據(jù)庫(kù)字段中。以下為具體方法:
一、保存圖片的上傳路徑到數(shù)據(jù)庫(kù):
string uppath=””;//用于保存圖片上傳路徑
//獲取上傳圖片的文件名
string fileFullname = this.FileUpload1.FileName;
//獲取圖片上傳的時(shí)間,以時(shí)間作為圖片的名字可以防止圖片重名
string dataName = DateTime.Now.ToString(“yyyyMMddhhmmss”);
//獲取圖片的文件名(不含擴(kuò)展名)
string fileName = fileFullname.Substring(fileFullname.LastIndexOf(“\\”) + 1);
//獲取圖片擴(kuò)展名
string type = fileFullname.Substring(fileFullname.LastIndexOf(“.”) + 1);
//判斷是否為要求的格式
if (type == “bmp” || type == “jpg” || type == “jpeg” || type == “gif” || type == “JPG” || type == “JPEG” || type == “BMP” || type == “GIF”)
{
//將圖片上傳到指定路徑的文件夾
this.FileUpload1.SaveAs(Server.MapPath(“~/upload”) + “\\” + dataName + “.” + type);
//將路徑保存到變量,將該變量的值保存到數(shù)據(jù)庫(kù)相應(yīng)字段即可
液櫻uppath = “~/upload/” + dataName + “.” + type;
}
二、將圖片以二進(jìn)制數(shù)據(jù)流直接保存到數(shù)據(jù)庫(kù):
引用如下命名空間:
using System.Drawing;
using System.IO;
using System.Data.SqlClient;
設(shè)計(jì)數(shù)據(jù)庫(kù)時(shí),表中相應(yīng)的字段類型為iamge
保存:
/滲搭/圖片路徑
string strPath = this.FileUpload1.PostedFile.FileName.ToString ();
//讀取圖片
FileStream fs = new System.IO.FileStream(strPath, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
byte photo = br.ReadBytes((int)fs.Length);
br.Close();
fs.Close();
//存入
SqlConnection myConn = new SqlConnection(“Data Source=.;Initial Catalog=stumanage;User ID=sa;Password=123”);
string strComm = ” INSERT INTO stuInfo(stuid,stuimage) VALUES(107,@photoBinary )”;//操作數(shù)據(jù)庫(kù)語(yǔ)句根據(jù)需要修改
SqlCommand myComm = new SqlCommand(strComm, myConn);
myComm.Parameters.Add(“@photoBinary”, SqlDbType.Binary, photo.Length);
myComm.Parameters.Value = photo;
myConn.Open();
if (myComm.ExecuteNonQuery() > 0)
叢埋拿{
this.Label1.Text = “ok”;
}
myConn.Close();
讀取:
…連接數(shù)據(jù)庫(kù)字符串省略
mycon.Open();
SqlCommand command = new
SqlCommand(“select stuimage from stuInfo where stuid=107”, mycon);//查詢語(yǔ)句根據(jù)需要修改
byte image = (byte)command.ExecuteScalar ();
//指定從數(shù)據(jù)庫(kù)讀取出來(lái)的圖片的保存路徑及名字
string strPath = “~/Upload/zhangsan.JPG”;
string strPhotoPath = Server.MapPath(strPath);
//按上面的路徑與名字保存圖片文件
BinaryWriter bw = new BinaryWriter(File.Open(strPhotoPath,FileMode.OpenOrCreate));
bw.Write(image);
bw.Close();
//顯示圖片
this.Image1.ImageUrl = strPath;
采用倆種方式可以根據(jù)實(shí)際需求靈活選擇。
1、新建一個(gè)數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)名為Image,表名為image。并為表添加ID,tupian兩個(gè)列。
2、新建一個(gè)項(xiàng)目(Photo),在工具箱中往窗體中拖入一個(gè)PictureBox控件,兩個(gè)Button按鈕,一個(gè)OpenFileDialog控件。并修改pictureBox1控件的屬性BorderStyle為FixedSingle,SizeMode為StretchImage;修改兩個(gè)button控件屬性的Text值依次為”打開(kāi)一張圖片”“插入數(shù)據(jù)庫(kù)”。
3、首先打開(kāi)“數(shù)據(jù)“選擇“添加新數(shù)據(jù)源”,然后(數(shù)據(jù)庫(kù))下一步,(
數(shù)據(jù)集
)下一步,選擇”新建連接“,依次選擇服務(wù)器名,服務(wù)器驗(yàn)證方式,選擇”選擇或輸入一個(gè)數(shù)據(jù)庫(kù)名。
4、選擇”選擇或輸入一個(gè)數(shù)據(jù)庫(kù)名,添加剛剛新建的數(shù)據(jù)庫(kù),然碼橘后點(diǎn)擊“測(cè)試檔培連接”,看看數(shù)據(jù)庫(kù)連接是否成功。成功后點(diǎn)“確定”回到“數(shù)據(jù)源配置向?qū)А表?yè)面,將“連接
字符串
復(fù)制下來(lái)。
5、行模唯添加兩條using
命名空間
using System.IO; using System.Data.SqlClient;作用為讀取
二進(jìn)制
數(shù)據(jù)流,用于數(shù)據(jù)庫(kù)的連接。
6、編輯Button按鈕“打開(kāi)一張圖片”的Click事件。
關(guān)于c 把圖片存入mysql數(shù)據(jù)庫(kù)的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
成都創(chuàng)新互聯(lián)科技有限公司,是一家專注于互聯(lián)網(wǎng)、IDC服務(wù)、應(yīng)用軟件開(kāi)發(fā)、網(wǎng)站建設(shè)推廣的公司,為客戶提供互聯(lián)網(wǎng)基礎(chǔ)服務(wù)!
創(chuàng)新互聯(lián)(www.cdcxhl.com)提供簡(jiǎn)單好用,價(jià)格厚道的香港/美國(guó)云服務(wù)器和獨(dú)立服務(wù)器。創(chuàng)新互聯(lián)——四川成都IDC機(jī)房服務(wù)器托管/機(jī)柜租用。為您精選優(yōu)質(zhì)idc數(shù)據(jù)中心機(jī)房租用、服務(wù)器托管、機(jī)柜租賃、大帶寬租用,高電服務(wù)器托管,算力服務(wù)器租用,可選線路電信、移動(dòng)、聯(lián)通機(jī)房等。
文章題目:如何在c語(yǔ)言中將圖片存入mysql數(shù)據(jù)庫(kù)(c把圖片存入mysql數(shù)據(jù)庫(kù))
鏈接分享:http://m.5511xx.com/article/dheojgh.html


咨詢
建站咨詢
