目前共有15篇帖子。 字体大小:较小 - 100% (默认)▼  内容转换:港澳繁體▼
 
点击 回复
686 14
【方法】VS2012下連接64位的MySQL數據庫
一派掌门 二十级
1楼 发表于:2016-2-29 22:32
【程序】
#include <mysql/mysql.h>
#include <stdio.h>
#include <tchar.h>
#include <Windows.h>

#define DB_PASSWORD "密碼"

int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
    MYSQL conn;
    mysql_init(&conn);
    if (!mysql_real_connect(&conn, "127.0.0.1", "root", DB_PASSWORD, "test", NULL, NULL, NULL))
    {
        MessageBox(NULL, TEXT("無法連接數據庫"), TEXT("錯誤"), MB_ICONWARNING);
        return 1;
    }
    mysql_set_character_set(&conn, "utf8");

    char *sql = "SELECT * FROM test ORDER BY ID LIMIT 4";
    mysql_query(&conn, sql);

    MYSQL_RES *rs = mysql_store_result(&conn);
    MYSQL_ROW row;
    int i;
    for (i = 0; row = mysql_fetch_row(rs); i++)
    {
        char title[10];
        sprintf_s(title, "第%s條記錄", row[0]);
        MessageBoxA(NULL, row[1], title, NULL);
    }
    mysql_free_result(rs);

    mysql_close(&conn);
    return 0;
}
一派掌门 二十级
2楼 发表于:2016-2-29 22:35
【建立工程的方法】
1.首先建立一個Win32的空項目,然後打開項目屬性,在配置管理器中新建一個x64的配置,下面的下拉框保持默認的Win32就行:
 
一派掌门 二十级
3楼 发表于:2016-2-29 22:37
我安裝的是MariaDB 10.1(MySQL的一個分支)
其安裝路徑是:
C:\Program Files\MariaDB 10.1

因此,頭文件目錄為:
C:\Program Files\MariaDB 10.1\include
(裏面只有一個mysql文件夾)
庫文件目錄為:
C:\Program Files\MariaDB 10.1\lib
 
一派掌门 二十级
4楼 发表于:2016-2-29 22:38
2.在C/C++->常規中填上頭文件目錄:
 
一派掌门 二十级
5楼 发表于:2016-2-29 22:39
3.在連結器->常規中填上庫文件目錄:
 
一派掌门 二十级
6楼 发表于:2016-2-29 22:40
4.在庫文件列表末尾加上「;libmysql.lib」
 
一派掌门 二十级
7楼 发表于:2016-2-29 22:41
5.建立源文件,編寫代碼後編譯程序:

 
一派掌门 二十级
8楼 发表于:2016-2-29 22:42
6.把庫文件目錄中的libmysql.dll複製到項目中的x64/Debug中:

 
一派掌门 二十级
9楼 发表于:2016-2-29 22:42
最後,就可以運行程序了:

 
一派掌门 二十级
10楼 发表于:2016-2-29 22:47
同樣也可以用上述方法建立一個控制台程序:
#include <iostream>
#include <mysql/mysql.h>

using namespace std;

#define DB_PASSWORD "密碼"

int main(void)
{
    MYSQL conn;
    mysql_init(&conn);
    if (!mysql_real_connect(&conn, "127.0.0.1", "root", DB_PASSWORD, "test", NULL, NULL, NULL))
    {
        cout << "無法連接數據庫" << endl;
        return 1;
    }
    mysql_set_character_set(&conn, "utf8");

    char *sql = "SELECT * FROM test ORDER BY ID";
    mysql_query(&conn, sql);

    MYSQL_RES *rs = mysql_store_result(&conn);
    MYSQL_ROW row;
    int i;
    for (i = 0; row = mysql_fetch_row(rs); i++)
    {
        cout << "第" << row[0] << "條記錄: " << row[1] << endl;
    }
    mysql_free_result(rs);

    mysql_close(&conn);
    system("pause");
    return 0;
}

運行結果:

 
一派掌门 二十级
11楼 发表于:2016-2-29 22:47
但是需要注意的是,建立控制台程序時最好建立空項目,否則可能會無法編譯64位的程序。
 
一派掌门 二十级
12楼 发表于:2016-2-29 22:49
VS2012狀態欄上應該選擇x64平台:

 
一派掌门 二十级
13楼 发表于:2016-2-29 22:49
回复12楼 @巨大八爪鱼 的内容:
VS2012狀態欄上應該選擇x64平台:
應該是工具欄!
 
一派掌门 二十级
14楼 发表于:2016-2-29 23:17
【在控制台中顯示UTF-8字符串的方法】
#include <iostream>
#include <mysql/mysql.h>
#include <Windows.h>

using namespace std;

#define DB_PASSWORD "密碼"

int main(void)
{
    MYSQL conn;
    mysql_init(&conn);
    if (!mysql_real_connect(&conn, "127.0.0.1", "root", DB_PASSWORD, "super", NULL, NULL, NULL))
    {
        cout << "無法連接數據庫" << endl;
        return 1;
    }
    mysql_set_character_set(&conn, "utf8");

    char *sql = "SELECT * FROM role ORDER BY ID";
    mysql_query(&conn, sql);

    MYSQL_RES *rs = mysql_store_result(&conn);
    MYSQL_ROW row;
    int i;
    for (i = 0; row = mysql_fetch_row(rs); i++)
    {
        // 將row[1]從UTF8轉換到UTF16,然後再轉換為ANSI
        int n = MultiByteToWideChar(CP_UTF8, NULL, row[1], -1, NULL, NULL);
        wchar_t *wstr = new wchar_t[n];
        MultiByteToWideChar(CP_UTF8, NULL, row[1], -1, wstr, n);
        n = WideCharToMultiByte(CP_ACP, NULL, wstr, -1, NULL, NULL, NULL, NULL);
        char *str = new char[n];
        WideCharToMultiByte(CP_ACP, NULL, wstr, -1, str, n, NULL, NULL);

        cout << "第" << row[0] << "條記錄: ";
        cout << str << endl;

        delete[] str;
        delete[] wstr;
    }
    mysql_free_result(rs);

    mysql_close(&conn);
    system("pause");
    return 0;
}
【運行結果】

 
一派掌门 二十级
15楼 发表于:2016-2-29 23:19
如果要在窗口程序中顯示UTF8字符串,只需將其轉換為UTF16(wchar_t)就行了,無需再轉換為ANSI
 

回复帖子

内容:
用户名: 您目前是匿名发表
验证码:
(快捷键:Ctrl+Enter)
 

本帖信息

点击数:686 回复数:14
评论数: ?
作者:巨大八爪鱼
最后回复:巨大八爪鱼
最后回复时间:2016-2-29 23:19
 
©2010-2025 Purasbar Ver2.0
除非另有声明,本站采用知识共享署名-相同方式共享 3.0 Unported许可协议进行许可。