windows c mysql_Windows下C/C++连接mysql数据库的方法

2023-05-16

步骤

安装MySQL数据库

项目属性页->C/C++->常规->附加包含目录:xxx\mysql Server 5.6\include

项目属性页->链接器->常规->附加库目录:xxx\MySQL Server 5.6\lib

项目属性页->链接器->输入->附加依赖项:

libmysql.lib 将libmysql.dll拷贝到项目中

引入头文件:#include #include

另外需要注意的是 Mysql版本是32位还是64位,如果是64位请将VS2013设置为 x64,具体设置为:右键项目->属性->在右上角有 “配置管理器” ->点击 修改为 x64

命名行操作数据库

数据库部分

1)开启 MYSQL数据库,在CMD下,输入: net start mysql 启动数据库

2 再将当前路径转到:C:\Program Files (x86)\MySQL\MySQL Server 5.5\bin 下,输入 mysql -uroot -p 然后让输入密码,这时输入当时安装mysql时的root密码。这时就进入了mysql下。

3:建立一个数据库: 输入 create database message; 则生成一个数据库message,接下来我们就要用VS2013中的程序连接这个message数据库。

现在操作始终有问题:

f3583ff914bd6153025a01e81f14029f.png

连接mysql可以成功

cd0a6822ab779a5cfb8deb703a97934d.png

C++连接MySql

操作成功的示例

#include

#include

#include

#include

#include

#include

using namespace std;

//#pragma comment(lib,"libmysql.lib")

int main()

{

const char user[] = "root"; //username

const char pswd[] = "ranjiewen"; //password

const char host[] = "localhost"; //or"127.0.0.1"

const char table[] = "world"; //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);

//auto ret = mysql_real_connect(&myCont, host, user, pswd, table, port, NULL, 0);

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 city");//查询 //database下有相应的表才能成功

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;

}

创建数据库失败的案例,待解决

#include

#include

#include

#include

using namespace std;

int main()

{

//必备的一个数据结构

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;

}

//初始化数据结构

if (NULL != mysql_init(&mydata)) {

cout << "mysql_init() succeed" << endl;

}

else {

cout << "mysql_init() failed" << endl;

return -1;

}

//在连接数据库之前,设置额外的连接选项

//可以设置的选项很多,这里设置字符集,否则无法处理中文

if (0 == mysql_options(&mydata, MYSQL_SET_CHARSET_NAME, "gbk")) {

cout << "mysql_options() succeed" << endl;

}

else {

cout << "mysql_options() failed" << endl;

return -1;

}

//连接数据库

if (NULL

!= mysql_real_connect(&mydata, "127.0.0.1", "root", "ranjiewen", "world",

3306, NULL, 0))

//这里的地址,用户名,密码,端口可以根据自己本地的情况更改

{

cout << "mysql_real_connect() succeed" << endl;

}

else {

cout << "mysql_real_connect() failed" << endl;

return -1;

}

//sql字符串

string sqlstr;

//创建一个表

sqlstr = "CREATE TABLE IF NOT EXISTS `new_paper` (";

sqlstr += " `NewID` int(11) NOT NULL AUTO_INCREMENT,";

sqlstr += " `NewCaption` varchar(40) NOT NULL,";

sqlstr += " `NewContent` text,";

sqlstr += " `NewTime` datetime DEFAULT NULL,";

sqlstr += " PRIMARY KEY(`NewID`)";

sqlstr += " ) ENGINE = InnoDB DEFAULT CHARSET = utf8";

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;

}

//向表中插入数据

for (int i = 0; i < 100; i++)

{

sqlstr =

"INSERT INTO `test`.`new_paper` (`NewID`, `NewCaption`, `NewContent`, `NewTime`) ";

//sqlstr += "VALUES (default, '组织者', '方提出更换存放骨灰存放', '2015-09-01 14:29:51');";

sqlstr += "VALUES (default, 'zhuzuzhe', 'fangtichu', '2015-09-01 14:29:51');";

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;

}

}

//显示刚才插入的数据

sqlstr = "SELECT `NewID`,`NewCaption`,`NewContent`,`NewTime` FROM `test`.`new_paper`";

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;

}

//删除刚才建的表

sqlstr = "DROP TABLE `test`.`new_paper`";

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成功,増删查

#pragma once

#include

#include

//#include

#include "mysql.h"

using namespace std;

class VspdCToMySQL

{

public:

//变量

MYSQL mysql;

/*

构造函数和稀构函数

*/

VspdCToMySQL();

~VspdCToMySQL();

/*

主要的功能:

初始化数据库

连接数据库

设置字符集

入口参数:

host :MYSQL服务器IP

port:数据库端口

Db:数据库名称

user:数据库用户

passwd:数据库用户的密码

charset:希望使用的字符集

Msg:返回的消息,包括错误消息

出口参数:

int :0表示成功;1表示失败

*/

int ConnMySQL(char *host, char * port, char * Db, char * user, char* passwd, char * charset, char * Msg);

/*

主要的功能:

查询数据

入口参数:

SQL:查询的SQL语句

Cnum:查询的列数

Msg:返回的消息,包括错误消息

出口参数:

string 准备放置返回的数据,多条记录则用0x06隔开,多个栏位用0x05隔开

如果 返回的长度= 0,责表示舞结果

*/

string SelectData(char * SQL, int Cnum, char * Msg);

/*

主要功能:

插入数据

入口参数

SQL:查询的SQL语句

Msg:返回的消息,包括错误消息

出口参数:

int :0表示成功;1表示失败

*/

int InsertData(char * SQL, char * Msg);

/*

主要功能:

不存在相同记录,插入数据

存在相同记录,更新数据

入口参数

SQL:查询的SQL语句

Msg:返回的消息,包括错误消息

出口参数:

int :0表示成功;1表示失败

*/

int ReplaceData(char * SQL, char * Msg);

/*

主要功能:

修改数据

入口参数

SQL:查询的SQL语句

Msg:返回的消息,包括错误消息

出口参数:

int :0表示成功;1表示失败

*/

int UpdateData(char * SQL, char * Msg);

/*

主要功能:

调用数据库存储过程

*/

int CallProcedure(char * SQL, char * Msg);

/*

主要功能:

删除数据

入口参数

SQL:查询的SQL语句

Msg:返回的消息,包括错误消息

出口参数:

int :0表示成功;1表示失败

*/

int DeleteData(char * SQL, char * Msg);

/*

主要功能:

关闭数据库连接

*/

void CloseMySQLConn();

};

//#include "stdafx.h"

#include "DBMySQL.h"

VspdCToMySQL::VspdCToMySQL()

{

}

VspdCToMySQL::~VspdCToMySQL()

{

}

//初始化数据

int VspdCToMySQL::ConnMySQL(char *host, char * port, char * Db, char * user, char* passwd, char * charset, char * Msg)

{

if (mysql_init(&mysql) == NULL)

{

Msg = "inital mysql handle error";

return 1;

}

if (mysql_real_connect(&mysql, host, user, passwd, Db, 0, NULL, 0) == NULL)

{

Msg = "Failed to connect to database: Error";

return 1;

}

if (mysql_set_character_set(&mysql, charset) != 0)

{

Msg = "mysql_set_character_set Error";

return 1;

}

return 0;

}

//查询数据

string VspdCToMySQL::SelectData(char * SQL, int Cnum, char * Msg)

{

MYSQL_ROW m_row;

MYSQL_RES *m_res;

char sql[2048];

sprintf(sql, SQL);

int rnum = 0;

char rg = 0x06;//行隔开

//char rg='\r';

char cg = 0x05;//字段隔开

if (mysql_query(&mysql, sql) != 0)

{

Msg = "select ps_info Error";

return "";

}

m_res = mysql_store_result(&mysql);

if (m_res == NULL)

{

Msg = "select username Error";

return "";

}

string str("");

while (m_row = mysql_fetch_row(m_res))

{

for (int i = 0; i < Cnum; i++)

{

str += m_row[i];

str += cg;

}

str += rg;

rnum++;

}

mysql_free_result(m_res);

return str;

}

//插入数据

int VspdCToMySQL::InsertData(char * SQL, char * Msg)

{

char sql[2048];

sprintf(sql, SQL);

if (mysql_query(&mysql, sql) != 0)

{

Msg = "Insert Data Error";

return 1;

}

return 0;

}

//更换数据

int VspdCToMySQL::ReplaceData(char * SQL, char * Msg)

{

char sql[2048];

sprintf(sql, SQL);

if (mysql_query(&mysql, sql) != 0)

{

Msg = "Replace Data Error";

return 1;

}

return 0;

}

//更新数据

int VspdCToMySQL::UpdateData(char * SQL, char * Msg)

{

char sql[2048];

sprintf(sql, SQL);

if (mysql_query(&mysql, sql) != 0)

{

Msg = "Update Data Error";

return 1;

}

return 0;

}

//删除数据

int VspdCToMySQL::DeleteData(char * SQL, char * Msg)

{

char sql[2048];

sprintf(sql, SQL);

if (mysql_query(&mysql, sql) != 0)

{

Msg = "Delete Data error";

return 1;

}

return 0;

}

//调用数据库存储过程

int VspdCToMySQL::CallProcedure(char * SQL, char * Msg)

{

char sql[2048];

sprintf(sql, SQL);

if (mysql_query(&mysql, sql) != 0)

{

Msg = "Call Procedure error";

return 1;

}

return 0;

}

//关闭数据库连接

void VspdCToMySQL::CloseMySQLConn()

{

mysql_close(&mysql);

printf("断开数据库\n");

}

#include "DBMySQL.h"

int main(int argc, char* argv[]) //修改数据库名称,在本地数据库服务器已经存在了

{

char* host = "127.0.0.1";

char* user = "root";

char* port = "3306";

char* passwd = "ranjiewen";

char* dbname = "world";

char* charset = "GBK";//支持中文

char* Msg = "";//消息变量

//初始化

VspdCToMySQL * vspdctomysql = new VspdCToMySQL;

if (vspdctomysql->ConnMySQL(host, port, dbname, user, passwd, charset, Msg) == 0)

printf("连接成功/r/n");

else

printf(Msg);

//查询

char * SQL = "SELECT ids,username,passwd,address FROM vcaccesstest";

string str = vspdctomysql->SelectData(SQL, 4, Msg);

if (str.length() > 0)

{

printf("查询成功/r/n");

printf(str.data());

printf("/r/n");

}

else

{

printf(Msg);

}

//插入

SQL = "insert into vcaccesstest(ids,username,passwd,address) values(4,'我的','123210','测试地址')";

if (vspdctomysql->InsertData(SQL, Msg) == 0)

printf("插入成功/r/n");

//更新

SQL = "update vcaccesstest set username = '修改了',passwd='2345' where ids = 3 ";

if (vspdctomysql->UpdateData(SQL, Msg) == 0)

printf("更新成功/r/n");

//删除

SQL = "delete from vcaccesstest where ids = 3 ";

if (vspdctomysql->DeleteData(SQL, Msg) == 0)

printf("删除成功/r/n");

vspdctomysql->CloseMySQLConn();

return 0;

}

接下来主要是做SQL基本语法进行系统学习

操作workbench

先不能连接locahost,后面可了连接成功。

基本的操作,可以用,查看什么应用程序操作了什么数据库

de0a63320c65c81594150ac54f7184e1.png

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

windows c mysql_Windows下C/C++连接mysql数据库的方法 的相关文章

  • 用于创建计划任务的 VBScript

    我正在尝试创建一个 VBScript 它创建一个批处理文件 然后创建一个计划任务来运行该批处理文件 到目前为止 我尝试过的所有操作都创建了批处理文件 但没有创建计划任务 并且我没有收到任何错误 这是我到目前为止所拥有的 Option Exp
  • mysql转储到derby

    我正在使用 derby 在 eclipse 中进行开发 是否可以从 MySQL 转储表并以某种方式将其用于 derby 我知道 ddl 和 dml 对于两个 dbms 来说是不同的 但我正在寻找一种除了转储 导出之外的合适方法 我可以找到两
  • 获取自动热键中的可用屏幕区域

    我正在尝试编写一些简单的 AutoHotkey 脚本来移动窗口 但在获取正确的屏幕尺寸值时遇到问题 我试图获取屏幕上可用区域的大小 通常是全屏分辨率减去任务栏 也许还有任何其他停靠窗口 如 Vista 中的侧边栏 我发现的获取屏幕宽度的方法
  • Windows 10 上的 LibPNG 构建问题

    我试图在 Windows 10 上构建 libpng 以获取 win32 二进制文件 但我认为有一个与 awk 解析带有 CRLF 行结尾的文件相关的问题 我尝试使用 dos2unix 命令转换文件 但没有成功 结果相同 在 make 命令
  • ntdll!kifastsystemcallret

    我的程序在执行结束时崩溃 甚至看不到堆栈展开信息 我只能看到这个 ntdll kifastsystemcallret 有人能提供一些线索吗 KiFastSystemCallRet 意味着线程处于系统调用中 x86 NT 系统调用调度的一个不
  • 什么时候应该使用 C++ 而不是 SQL?

    我是一名 C 程序员 偶尔使用 MySQL 来处理数据库 但我的 SQL 知识相当有限 但我肯定愿意改变这一点 目前 我正在尝试仅使用 SQL 查询对数据库中的数据进行分析 但我准备放弃了 转而将数据导入到C 中 用C 代码进行分析 我和同
  • 如果 Row1 = 值 1,则更新其他行

    我有一个小的 php 脚本 用于访问 mySql 数据库 我想在数据库中插入新记录之前查看该数字 值 1 是否等于数据库中的记录 这也在第 1 行 所以我想 查看传入的电话号码是否等于数据库中的电话号码 如果是这样 则必须保持电话号码相同的
  • 将 value 转换为 bool 的魔法

    今天我意识到将值转换为 bool 是一种魔法 int value 0x100 unsigned char uc static cast
  • 错误代码:1305。函数或过程不存在

    因此 我在 MySQL 中创建一个函数 然后尝试向用户授予使用该函数的权限 但我无法这样做 这就是我正在做的 DELIMITER USE rxhelp36 scbn DROP FUNCTION IF EXISTS businessDayDi
  • Mac OS X 上的 /proc/self/cmdline / GetCommandLine 等效项是什么?

    如何在不使用 argc argv 的情况下访问 Mac OS X 上的命令行 在 Linux 上 我会简单地阅读 proc self cmdline or use GetCommandLine在 Windows 上 但我找不到 Mac OS
  • SetWindowsHookEx 函数返回 NULL

    我正在研究 DLL 注入 但收到错误如下 挂接进程失败 87 参数不正确 目标进程和dll都是64位的 注入代码为 BOOL HookInjection TCHAR target TCHAR dll name https msdn micr
  • TRACKER:错误TRK0005:无法找到:“CL.exe”。该系统找不到指定的文件

    我尝试在 Windows 8 上的 Node js 项目中执行以下命令 npm 安装 电子邮件受保护 cdn cgi l email protection 但我收到一个错误 我不知道如何处理 TRACKER 错误TRK0005 无法找到 C
  • 在 SQL 中,如何从 SELECT * FROM ... 中排除结果?

    我知道我的标题不太具有描述性 让我在这里详细解释一下 假设一个表有 26 个字段 例如字段 a 字段 z 我只想要一个选择查询只返回 15 个字段 所以 通常 我会执行 SELECT field a field b field o FROM
  • MaxListenersExceededWarning:检测到可能的 EventEmitter 内存泄漏。添加了 11 条消息列表。使用emitter.setMaxListeners()来增加限制

    我知道这可能会标记为重复的解决方案 但堆栈溢出的解决方案对我不起作用 Problem node 5716 MaxListenersExceededWarning Possible EventEmitter memory leak detec
  • Windows:更改与文件类型关联的应用程序的名称/图标

    我想将 Windows 中的文件类型与特定应用程序相关联 但我需要这样做 以便当用户打开 打开方式 菜单时 列表中应用程序的名称和图标是针对该文件类型自定义的 即 不仅仅是可执行文件的名称和图标 这是因为该二进制文件是一个通用二进制文件 可
  • PHP 与 MySQL 查询性能( if 、 函数 )

    我只看到这个artice http www onextrapixel com 2010 06 23 mysql has functions part 5 php vs mysql performance 我需要知道在这种情况下什么是最好的表
  • Mysql插入表后不显示右单引号(’)

    我有一个名为 测试 的表 我插入了一行 其中包含unicode字符右单引号 0x2019在名称字段中 SQL insert into Testing values Sno Name Address insert into Testing v
  • 快速将列的副本添加到 MySQL 表

    我需要一种快速的方法来复制表中的 DATETIME 列并为其指定一个新名称 我的表中有一个名为 myDate 的列 名为 myResults 我需要一个查询来在名为 newDate 的表中创建一个新列 该列的数据与 myDate 列完全相同
  • 无法访问127.0.0.1

    我不知道这种情况何时开始发生 但结果是 127 0 0 1 无法在任何地方的任何端口上工作 例如 浏览器显示无法连接 以下是我的研究结果 localhost COMPUTER NAME 和实际 IP 地址都工作正常 我的主机文件中没有什么特
  • post php mysql 的拆分关键字

    我有一个表存储帖子 ID 它的标签如下 Post id Tags 1 keyword1 keyword2 keyword3 我想循环遍历该表中的每一行并执行以下操作 将关键字1 关键字2 关键字3放入新表中 word id word val

随机推荐