久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

C++的VS2010和MySQL數據庫的鏈接問題舉例分析

140次閱讀
沒有評論

共計 6751 個字符,預計需要花費 17 分鐘才能閱讀完成。

這篇文章主要講解了“C++ 的 VS2010 和 MySQL 數據庫的鏈接問題舉例分析”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著丸趣 TV 小編的思路慢慢深入,一起來研究和學習“C++ 的 VS2010 和 MySQL 數據庫的鏈接問題舉例分析”吧!

// 下面的代碼是一個實現 C ++ 連接 MYSQL 數據庫的很好的例子
// 這里用了建表,插入,檢索,刪表等常用功能
// 我用 VC++6.0 生成,已經成功連接了。// 在 VC++6.0 中要想把做一下兩步準備工作才可以。//(1)Tools- Options- Directories- Include files 中添加 C:\Program Files\MySQL\MySQL Server 6.0\include
//(2)Tools- Options- Directories- Library files 中添加 C:\Program Files\MySQL\MySQL Server 6.0\lib\opt
// 其實就是將頭文件和庫文件包含進來
// 我覺得這個例子寫的很好,再結合自己的試驗,特地介紹給大家!#include  winsock.h 
#include  iostream 
#include  string 
#include  mysql.h 
using namespace std;
#pragma comment(lib,  ws2_32.lib)
#pragma comment(lib,  libmysql.lib)
// 單步執行,不想單步執行就注釋掉
#define STEPBYSTEP
int main() {
 cout    ****************************************    endl;
#ifdef STEPBYSTEP
 system( pause 
#endif
 // 必備的一個數據結構
 MYSQL mydata;
 // 初始化數據庫
 if (0 == mysql_library_init(0, NULL, NULL)) {cout    mysql_library_init() succeed    endl;
 } else {cout    mysql_library_init() failed    endl;
 return -1;
#ifdef STEPBYSTEP
 system( pause 
#endif
 // 初始化數據結構
 if (NULL != mysql_init( mydata)) {cout    mysql_init() succeed    endl;
 } else {cout    mysql_init() failed    endl;
 return -1;
#ifdef STEPBYSTEP
 system( pause 
#endif
 // 在連接數據庫之前,設置額外的連接選項
 // 可以設置的選項很多,這里設置字符集,否則無法處理中文
 if (0 == mysql_options( mydata, MYSQL_SET_CHARSET_NAME,  gbk)) {cout    mysql_options() succeed    endl;
 } else {cout    mysql_options() failed    endl;
 return -1;
#ifdef STEPBYSTEP
 system( pause 
#endif
 // 連接數據庫
 if (NULL
 != mysql_real_connect( mydata,  localhost ,  root ,  test ,  test ,
 3306, NULL, 0))
 // 這里的地址,用戶名,密碼,端口可以根據自己本地的情況更改
 cout    mysql_real_connect() succeed    endl;} else {cout    mysql_real_connect() failed    endl;
 return -1;
#ifdef STEPBYSTEP
 system( pause 
#endif
 //sql 字符串
 string sqlstr;
 // 創建一個表
 sqlstr =  CREATE TABLE IF NOT EXISTS user_info 
 sqlstr +=  ( 
 sqlstr +=
 user_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT  Unique User ID , 
 sqlstr +=
 user_name VARCHAR(100) CHARACTER SET gb2312 COLLATE gb2312_chinese_ci NULL COMMENT  Name Of User , 
 sqlstr +=
 user_second_sum INT UNSIGNED NOT NULL DEFAULT 0 COMMENT  The Summation Of Using Time 
 sqlstr +=  
 if (0 == mysql_query( mydata, sqlstr.c_str())) {cout    mysql_query() create table succeed    endl;
 } else {cout    mysql_query() create table failed    endl;
 mysql_close(mydata);
 return -1;
#ifdef STEPBYSTEP
 system( pause 
#endif
 // 向表中插入數據
 sqlstr =
 INSERT INTO user_info(user_name) VALUES(公司名稱),(一級部門),(二級部門),(開發小組),( 姓名 
 if (0 == mysql_query( mydata, sqlstr.c_str())) {cout    mysql_query() insert data succeed    endl;
 } else {cout    mysql_query() insert data failed    endl;
 mysql_close(mydata);
 return -1;
#ifdef STEPBYSTEP
 system( pause 
#endif
 // 顯示剛才插入的數據
 sqlstr =  SELECT user_id,user_name,user_second_sum FROM user_info 
 MYSQL_RES *result = NULL;
 if (0 == mysql_query( mydata, sqlstr.c_str())) {cout    mysql_query() select data succeed    endl;
 // 一次性取得數據集
 result = mysql_store_result(mydata);
 // 取得并打印行數
 int rowcount = mysql_num_rows(result);
 cout    row count:     rowcount   endl;
 // 取得并打印各字段的名稱
 unsigned int fieldcount = mysql_num_fields(result);
 MYSQL_FIELD *field = NULL;
 for (unsigned int i = 0; i   fieldcount; i++) {field = mysql_fetch_field_direct(result, i);
 cout   field- name    \t\t 
 cout   endl;
 // 打印各行
 MYSQL_ROW row = NULL;
 row = mysql_fetch_row(result);
 while (NULL != row) {for (int i = 0; i   fieldcount; i++) {cout   row[i]    \t\t 
 cout   endl;
 row = mysql_fetch_row(result);
 } else {cout    mysql_query() select data failed    endl;
 mysql_close(mydata);
 return -1;
#ifdef STEPBYSTEP
 system( pause 
#endif
 // 刪除剛才建的表
 sqlstr =  DROP TABLE user_info 
 if (0 == mysql_query( mydata, sqlstr.c_str())) {cout    mysql_query() drop table succeed    endl;
 } else {cout    mysql_query() drop table failed    endl;
 mysql_close(mydata);
 return -1;
 mysql_free_result(result);
 mysql_close(mydata);
 mysql_server_end();
 system( pause 
 return 0;
}

原文地址:C++ 日記——Mysql 和 vs2010  的連接作者:赤道與北極

使用的是 API 方式,使用 Mysql 的數據庫資源,所以需要包含頭文件、連接 Lib 和獲取相應的 dll 文件。

一 vc 的設置

這里使用的是 vs2010,所以附上 vs2010 的設置

(1)打開 VC6.0 工具欄 Tools 菜單下的 Options 選項,在 Directories 的標簽頁中右邊的“Show directories for:”下拉列表中選中“Includefiles”,然后在中間列表框中添加你本地安裝 MySQL 的 include 目錄路徑。(我的是 D:Program FilesMySQLMySQL Server 5.0include)。

vs2010 中的設置,在:項目 - 屬性 - 配置屬性 -VC++ 目錄 - 包含目錄

(2)在上面說到的“Show directories for:”下拉列表中選中“Library files”,然后添加你本地安裝 MySQL 的 Lib 目錄路徑。Lib 目錄下還有 debug 和 opt 兩個目錄,建議選 debug。(我的是 D:Program FilesMySQLMySQL Server 5.0libdebug)。

vs2010 中的設置,在:項目 - 屬性 - 配置屬性 -VC++ 目錄 - 庫目錄

或者:項目 - 屬性 - 配置屬性 - 連接器 - 常規 - 附加庫目錄

(3)在“Project settings- Link:Object/library modules”里面添加“libmysql.lib”。

vs2010 中的設置,在:項目 - 屬性 - 配置屬性 - 連接器 - 輸入 - 附加依賴項

(4)在 stdafx.h 里面添加如下的內容:

 

#include  mysql.h 
#include  winsock.h  //  如果編譯出錯, 則把該行放到 #include  mysql.h 之前 #pragma comment(lib, libmySQL.lib) //  如果在附加依賴項里已增加, 則就不要添加了 

 

(5)建議將“libmySQL.lib、libmySQL.dll”拷到你所建的工程的目錄下。

這個也需要!

 

二 數據庫的相關操作

打開“開始 - 所有程序 - MySQL- MySQL Server 5.0- MySQL Command Line Client.exe”,如果沒有設置密碼就直接按回車,會提示服務器啟動成功。

mysql  SHOW DATABASES;// 顯示所有的數據庫,注意一定要   敲“;”后再按回車
mysql  CREATE DATABASE mydb;// 創建數據庫 mydb
mysql  USE mydb;// 選擇你所創建的數據庫 mydb
mysql  SHOW TABLES; // 顯示數據庫中的表
mysql  CREATE TABLE mytable (username VARCHAR(100), visitelist VARCHAR(200),

remark VARCHAR(200));// 創建一個表 mytable: 用戶名;訪問列表

 

;備注
mysql DESCRIBE mytable;// 顯示表的結構

 

三 VC 編程

 

MYSQL mysql; // 數據庫連接句柄
mysql_init (mysql);
if(!mysql_real_connect( mysql, localhost , root ,NULL, mydb ,3306,NULL,0)) {//mydb 為你所創建的數據庫,3306 為端口號,可自行設定  
AfxMessageBox( 數據庫連接失敗  
return FALSE;
}

 

(1)實現添加 功能

 

CString strUsername,strList,strRemark,strSQL;
strSQL.Format(insert into mytable(username,visitelist,remark) values(%s , %s , %s) , strUsername,strList,strRemark);// 注意一定要寫在一行,而且必須要有 
if(mysql_real_query( mysql,(char*)(LPCTSTR)strSQL,(UINT)strSQL.GetLength())!=0){ 
AfxMessageBox(增添失敗  }

(2)實現修改功能

 

 

CString strUsername,strList,strRemark,strSQL,str_PreName;//str_PreName 用于記錄想要修改的行,詳情請看源代碼
strSQL.Format(update mytable set username= %s ,visitelist= %s , remark= %s  where username= %s ,strUsername,strList,strRemark,str_PreName);
if(mysql_real_query( mysql,(char*)(LPCTSTR)strSQL,(UINT)strSQL.GetLength())!=0){ 
AfxMessageBox(修改失敗  }

 

(3)實現刪除功能

 

CString strSQL;
strSQL.Format(delete from mytable where username= %s ,str_PreName);// 必須要有 
if(mysql_real_query( mysql,(char*)(LPCTSTR)strSQL,(UINT)strSQL.GetLength())!=0){ 
AfxMessageBox(刪除失敗  }

 

(4)讀取表格內容到 CListCtrl 控件 m_list

 

m_list.DeleteAllItems();
char *ch_query;
ch_query= select * from mytable 
if(mysql_real_query( mysql,ch_query,(UINT)strlen(ch_query))!=0){ 
AfxMessageBox( 數據庫中表格出錯  
CString str;
MYSQL_RES *result;
MYSQL_ROW row;
if(!(result=mysql_use_result( mysql))){ 
AfxMessageBox( 讀取數據集失敗  
int i=0;
while(row=mysql_fetch_row(result)){str.Format( %s ,row[0]);
m_list.InsertItem(i,str);
str.Format(%s ,row[1]);
m_list.SetItemText(i,1,str);
str.Format(%s ,row[2]);
m_list.SetItemText(i,2,str);
mysql_free_result(result);
 做一些添加:
while (row=mysql_fetch_row(result))
{num=mysql_num_fields(result);
for (int j=0;j j++)
...}
mysql_fetch_row 依次獲取受影響的行,當結束時返回 NULL,mysql_num_fields 獲取該行的列數。注意,這里的 row 是 char**  類型,即 row[i] 是 char* 類型。

(5)關閉數據庫

mysql_close(mysql);// 最好寫到 OnDestroy() 函數中 

感謝各位的閱讀,以上就是“C++ 的 VS2010 和 MySQL 數據庫的鏈接問題舉例分析”的內容了,經過本文的學習后,相信大家對 C ++ 的 VS2010 和 MySQL 數據庫的鏈接問題舉例分析這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是丸趣 TV,丸趣 TV 小編將為大家推送更多相關知識點的文章,歡迎關注!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-18發表,共計6751字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 祁门县| 乐山市| 石泉县| 黄浦区| 法库县| 东方市| 秀山| 平谷区| 富锦市| 巴彦淖尔市| 米易县| 通州市| 松潘县| 涡阳县| 遵义县| 大安市| 江北区| 嘉禾县| 定州市| 上栗县| 贡觉县| 彰化县| 溧水县| 嘉善县| 蒲江县| 黑水县| 阿坝| 波密县| 布尔津县| 苗栗县| 克拉玛依市| 扎兰屯市| 郴州市| 大田县| 布尔津县| 济源市| 普陀区| 盐源县| 临江市| 同江市| 秭归县|