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

創(chuàng)新互聯(lián)服務項目包括肇州網(wǎng)站建設、肇州網(wǎng)站制作、肇州網(wǎng)頁制作以及肇州網(wǎng)絡營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關系等,向廣大中小型企業(yè)、政府機構等提供互聯(lián)網(wǎng)行業(yè)的解決方案,肇州網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務的客戶以成都為中心已經(jīng)輻射到肇州省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!
1. 準備工作
在開始之前,我們需要安裝mysql數(shù)據(jù)庫和相關驅動程序。此外,我們還需要一個c語言開發(fā)環(huán)境,如Visual Studio或Code::Blocks。
2. 創(chuàng)建數(shù)據(jù)庫表格
我們需要創(chuàng)建一個用于存儲圖片的數(shù)據(jù)庫表格。可以使用mysql命令行工具或任何mysql客戶端來完成此操作。
下面是創(chuàng)建數(shù)據(jù)庫表格的示例代碼:
CREATE TABLE images (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
data LONGBLOB
);
該表格包含三列:id、name和data。id列是自動遞增的主鍵,用于唯一標識每個記錄。name列用于存儲圖片的名稱,data列用于存儲圖片的內(nèi)容。我們使用LONGBLOB類型來存儲二進制數(shù)據(jù)。
3. 讀取圖片數(shù)據(jù)
在將圖片存入數(shù)據(jù)庫之前,我們需要從文件中讀取圖片數(shù)據(jù)。我們可以使用c語言中的文件I/O函數(shù)來完成此操作。
下面是讀取圖片數(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);
在上面的代碼中,我們打開一個名為sample.jpg的文件,并使用fread函數(shù)將其內(nèi)容讀入內(nèi)存中的緩沖區(qū)中。我們使用malloc函數(shù)來分配足夠的內(nèi)存來存儲整個文件,然后在讀取文件后將文件指針關閉。
4. 將圖片數(shù)據(jù)存入數(shù)據(jù)庫
我們可以使用mysql C API來將讀取的圖片數(shù)據(jù)存入數(shù)據(jù)庫中。該API包含一組函數(shù),為開發(fā)人員提供了與mysql數(shù)據(jù)庫進行交互的方法。
下面是將圖片數(shù)據(jù)存入數(shù)據(jù)庫的示例代碼:
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ù)庫的連接。我們使用malloc函數(shù)分配足夠的內(nèi)存來存儲INSERT查詢。接下來,我們將查詢字符串組裝起來并使用mysql_query函數(shù)執(zhí)行它。我們使用mysql_close函數(shù)關閉數(shù)據(jù)庫連接。
5. 結論
在本文中,我們介紹了。我們討論了如何創(chuàng)建數(shù)據(jù)庫表格、如何讀取圖片數(shù)據(jù)以及如何使用mysql C API將數(shù)據(jù)存入數(shù)據(jù)庫中。希望這篇文章對正在尋找此類解決方案的開發(fā)人員有所幫助。
相關問題拓展閱讀:
- 圖片如何存入數(shù)據(jù)庫?
圖片如何存入數(shù)據(jù)庫?
通常對用戶上傳的圖片需要保存到數(shù)據(jù)庫中。解決方法一般有兩種:一種是將圖片保存的路徑存儲到數(shù)據(jù)庫;另一種是將圖片以二進制數(shù)據(jù)流的形式直接寫入數(shù)據(jù)庫字段中。以下為具體方法:
一、保存圖片的上傳路徑到數(shù)據(jù)庫:
string uppath=””;//用于保存圖片上傳路徑
//獲取上傳圖片的文件名
string fileFullname = this.FileUpload1.FileName;
//獲取圖片上傳的時間,以時間作為圖片的名字可以防止圖片重名
string dataName = DateTime.Now.ToString(“yyyyMMddhhmmss”);
//獲取圖片的文件名(不含擴展名)
string fileName = fileFullname.Substring(fileFullname.LastIndexOf(“\\”) + 1);
//獲取圖片擴展名
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ù)庫相應字段即可
液櫻uppath = “~/upload/” + dataName + “.” + type;
}
二、將圖片以二進制數(shù)據(jù)流直接保存到數(shù)據(jù)庫:
引用如下命名空間:
using System.Drawing;
using System.IO;
using System.Data.SqlClient;
設計數(shù)據(jù)庫時,表中相應的字段類型為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ù)庫語句根據(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();
讀?。?/p>
…連接數(shù)據(jù)庫字符串省略
mycon.Open();
SqlCommand command = new
SqlCommand(“select stuimage from stuInfo where stuid=107”, mycon);//查詢語句根據(jù)需要修改
byte image = (byte)command.ExecuteScalar ();
//指定從數(shù)據(jù)庫讀取出來的圖片的保存路徑及名字
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ù)實際需求靈活選擇。
1、新建一個數(shù)據(jù)庫,數(shù)據(jù)庫名為Image,表名為image。并為表添加ID,tupian兩個列。
2、新建一個項目(Photo),在工具箱中往窗體中拖入一個PictureBox控件,兩個Button按鈕,一個OpenFileDialog控件。并修改pictureBox1控件的屬性BorderStyle為FixedSingle,SizeMode為StretchImage;修改兩個button控件屬性的Text值依次為”打開一張圖片”“插入數(shù)據(jù)庫”。
3、首先打開“數(shù)據(jù)“選擇“添加新數(shù)據(jù)源”,然后(數(shù)據(jù)庫)下一步,(
數(shù)據(jù)集
)下一步,選擇”新建連接“,依次選擇服務器名,服務器驗證方式,選擇”選擇或輸入一個數(shù)據(jù)庫名。
4、選擇”選擇或輸入一個數(shù)據(jù)庫名,添加剛剛新建的數(shù)據(jù)庫,然碼橘后點擊“測試檔培連接”,看看數(shù)據(jù)庫連接是否成功。成功后點“確定”回到“數(shù)據(jù)源配置向導”頁面,將“連接
字符串
復制下來。
5、行模唯添加兩條using
命名空間
using System.IO; using System.Data.SqlClient;作用為讀取
二進制
數(shù)據(jù)流,用于數(shù)據(jù)庫的連接。
6、編輯Button按鈕“打開一張圖片”的Click事件。
關于c 把圖片存入mysql數(shù)據(jù)庫的介紹到此就結束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關注本站。
成都創(chuàng)新互聯(lián)科技有限公司,是一家專注于互聯(lián)網(wǎng)、IDC服務、應用軟件開發(fā)、網(wǎng)站建設推廣的公司,為客戶提供互聯(lián)網(wǎng)基礎服務!
創(chuàng)新互聯(lián)(www.cdcxhl.com)提供簡單好用,價格厚道的香港/美國云服務器和獨立服務器。創(chuàng)新互聯(lián)——四川成都IDC機房服務器托管/機柜租用。為您精選優(yōu)質idc數(shù)據(jù)中心機房租用、服務器托管、機柜租賃、大帶寬租用,高電服務器托管,算力服務器租用,可選線路電信、移動、聯(lián)通機房等。
分享題目:如何在c語言中將圖片存入mysql數(shù)據(jù)庫(c把圖片存入mysql數(shù)據(jù)庫)
網(wǎng)頁地址:http://www.dlmjj.cn/article/dheojgh.html


咨詢
建站咨詢
