[C++]MySQL數據庫操作實例

由於課程大實驗需要使用c++操作MySQL數據庫,經過一番研究終於成功實現VS2008中與MySQL的連接。
 
環境設置:
安裝完MySQL之後,將安裝目錄中的include目錄下的libmysql.lib文件拷到VS2008安裝目錄中的VC\lib\下,然後在 項目-選項-c/c++-常規 中的附加包含目錄以及 鏈接器-常規 中的附加庫目錄中加入“c:\MySQL\include\”,並且在 鏈接器-輸入 中的附加依賴項內添加“libmysql.lib,這樣即可使編譯器找到mysql.h頭文件,並可在程序中使用c語言的mysql API來操作數據庫。(如果MySQL安裝目錄中無include目錄,可到MySQL官網下載並安裝MySQL connector for C,並修改include目錄路徑)
#include <Windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <mysql.h>
#include <iostream>
using namespace std;

int main()
{
        const char user[] = "root";                 //username
        const char pswd[] = "root";                 //password
        const char host[] = "localhost";        //or"127.0.0.1"
        const char table[] = "test";                //database
        unsigned int port = 3306;                     //server port                
        MYSQL myCont;
        MYSQL_RES *result;
        MYSQL_ROW sql_row;
        MYSQL_FIELD *fd;
        char column[32][32];
        int res;
        mysql_init(&myCont);
        if(mysql_real_connect(&myCont,host,user,pswd,table,port,NULL,0))
        {
                cout<<"connect succeed!"<<endl;
                mysql_query(&myCont, "SET NAMES GBK"); //設置編碼格式,否則在cmd下無法顯示中文
                res=mysql_query(&myCont,"select * from samples");//查詢
                if(!res)
                {
                        result=mysql_store_result(&myCont);//保存查詢到的數據到result
                        if(result)
                        {
                                int i,j;
                                cout<<"number of result: "<<(unsigned long)mysql_num_rows(result)<<endl;
                                for(i=0;fd=mysql_fetch_field(result);i++)//獲取列名
                                {
                                        strcpy(column[i],fd->name);
                                }
                                j=mysql_num_fields(result);
                                for(i=0;i<j;i++)
                                {
                                        printf("%s\t",column[i]);
                                }
                                printf("\n");
                                while(sql_row=mysql_fetch_row(result))//獲取具體的數據
                                {
                                        for(i=0;i<j;i++)
                                        {
                                                printf("%s\n",sql_row[i]);
                                        }
                                        printf("\n");
                                }
                        }
                }
                else
                {
                        cout<<"query sql failed!"<<endl;
                }
        }
        else
        {
                cout<<"connect failed!"<<endl;
        }
        if(result!=NULL) mysql_free_result(result);//釋放結果資源
        mysql_close(&myCont);//斷開連接
        return 0;
}
使用總結: 
1.#include<mysql.h>之前一定要加上#include<windows.h>否則會產生如下錯誤:
>d:\my documents\visual studio 2008\projects\testmysql\testmysql\mysql\mysql_com.h(191) : error C2146: 語法錯誤 : 缺少“;”(在標識符“fd”的前面)
>d:\my documents\visual studio 2008\projects\testmysql\testmysql\mysql\mysql_com.h(191) : error C4430: 缺少類型說明符 - 假定爲 int。注意: C++ 不支持默認 int
>d:\my documents\visual studio 2008\projects\testmysql\testmysql\mysql\mysql_com.h(191) : error C4430: 缺少類型說明符 - 假定爲 int。注意: C++ 不支持默認 int
>d:\my documents\visual studio 2008\projects\testmysql\testmysql\mysql\mysql_com.h(366) : error C2065: “SOCKET”: 未聲明的標識符
>d:\my documents\visual studio 2008\projects\testmysql\testmysql\mysql\mysql_com.h(366) : error C2146: 語法錯誤 : 缺少“)”(在標識符“s”的前面)
>d:\my documents\visual studio 2008\projects\testmysql\testmysql\mysql\mysql_com.h(367) : error C2059: 語法錯誤 : “)”

2.總結一下常用MySQL命令:
測試環境:MySQL 5.1.35
安裝MySQL之後,打開MySQL Command Line Client,輸入root密碼,即可操作數據庫

//查看MySQL版本
mysql> select version();

//顯示所有數據庫
mysql> show databases;

//使用數據庫
mysql> use database_name;

//顯示所有數據表
mysql> show tables;

//顯示數據表結構
mysql> describe table_name;

//創建數據庫
mysql> create database database_name;

//刪除數據庫
mysql> drop database database_name;

//創建數據表
mysql> use database_name;
mysql> create table table_name (字段名 VARCHAR(20), 字段名 CHAR(1));

//刪除數據表
mysql> drop table table_name;

//查詢記錄
mysql> select * from table_name;

//導入.sql文件
mysql> use database_name;
mysql> source c:/mysql.sql

//修改root密碼
mysql> UPDATE mysql.user SET password=PASSWORD('新密碼') WHERE User='root';

//退出
mysql> quit

3,編譯出錯解決:
[root@localhost test]# g++ -o my mysql.cpp -l mysqlclient
mysql.cpp: In function ‘int main(int, char**)’:
mysql.cpp:7: 警告:不建議使用從字符串常量到‘char*’的轉換
mysql.cpp:8: 警告:不建議使用從字符串常量到‘char*’的轉換
mysql.cpp:9: 警告:不建議使用從字符串常量到‘char*’的轉換
/usr/bin/ld: cannot find -lmysqlclient
collect2: ld 返回 1

加入-L指定庫所在路徑:
[root@localhost test]# g++ -I/usr/include/mysql -L/usr/lib64/mysql -lmysqlclient -o mysql mysql.cpp 
mysql.cpp: In function ‘int main(int, char**)’:
mysql.cpp:7: 警告:不建議使用從字符串常量到‘char*’的轉換
mysql.cpp:8: 警告:不建議使用從字符串常量到‘char*’的轉換
mysql.cpp:9: 警告:不建議使用從字符串常量到‘char*’的轉換
[root@localhost test]# ls
helloworld  helloworld.cpp  mysql  mysql.cpp

相關操作參考:
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章