共計 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 小編將為大家推送更多相關知識點的文章,歡迎關注!