作者共發了15篇帖子。 內容轉換:不轉換▼
 
點擊 回復
520 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)
 

本帖信息

點擊數:520 回複數:14
評論數: ?
作者:巨大八爪鱼
最後回復:巨大八爪鱼
最後回復時間:2016-2-29 23:19
 
©2010-2024 Arslanbar Ver2.0
除非另有聲明,本站採用創用CC姓名標示-相同方式分享 3.0 Unported許可協議進行許可。