怎样在C++中调用MYSQL数据库中的数据

怎样在C++中调用MYSQL数据库中的数据,第1张

1、用CAPI连接MySQL数据库有两个步骤:

1)初始化一个连接句柄

2)建立连接

所用到的函数如下:

MYSQL *mysql_init(MYSQL *connection) // 初始化连接句柄

//成功返回MySQL结构指针,失败返回NULL

MYSQL *mysql_real_connect(MYSQL *connection,

const char *server_host,

const char *sql_user_name,

const char *sql_password,

const char *db_name,

unsigned int port_number,

const char *unix_socket_name,

unsigned int flags) //建立连接

//成功返回MySQL结构指针,失败返回NULL

以下是完整实例:

#include <iostream>

#include <fstream>

#include <cstdlib>

#include <mysql/mysql.h>

using namespace std

void mysql_err_function(MYSQL * connection)

int main()

{

//freopen("input.txt","r",stdin)

MYSQL * connection

connection = mysql_init(NULL)

if (!connection)

{

cout <<"mysql_init failed!" <<endl

exit(-1)

}

if (!mysql_real_connect(connection,"localhost","root","123456","test",0,NULL,0))

{

cout <<"Connection To MySQL failed!" <<endl

mysql_err_function(connection)

}

cout <<"Connection To MySQL Server is Success..." <<endl

string str

getline(cin,str)

int res = 0

int affected_count = 0

while (str != "close" &&str != "" &&!res)

{

res = mysql_query(connection,str.c_str())

affected_count += mysql_affected_rows(connection)

if (res)

{

if (mysql_errno(connection))

{

cout <<"Error " <<mysql_errno(connection) <<" : "

<<mysql_error(connection) <<'\n' <<endl

break

}

}

getline(cin,str)

}

cout <<"Have affected " <<affected_count <<" rows!" <<endl

mysql_close(connection)

cout <<"Connection To MySQL Server is closed..." <<endl

return 0

}

void mysql_err_function(MYSQL * connection)

{

if (mysql_errno(connection))

{

cout <<"Error " <<mysql_errno(connection) <<" : "

<<mysql_error(connection) <<endl

exit(-1)

}

}

方法如下:

1.头文件:

#include

#include

#include//这个是必需要包含的,下面对mysql的所有 *** 作函数,都出自这里

2.定义一个MYSQL变量

MYSQLmysql;

这里MYSQL是一个用于连接MySql数据库的变量。

在后面对mysql数据库的 *** 作中,我们就用这个MYSQL变量作为句柄的。

3.定义数据库参数:

charhost[32]=”localhost”

charuser[32]=”username”

charpasswd[32]=”pwd”

chardbname[32]=”testdb”

4.数据库 *** 作

1).初始化数据库:

mysql_init(&mysql);

2).连接数据库:

mysql_real_connect(&mysql,host,user,passwd,dbname,0,NULL,0);

我们在 *** 作时,可以对以上的函数进行if测试,如果初始化或者连接出错,作出相应提示,以便调试。

5.对数据库的 *** 作:

Mysql_query(&mysql,“select*fromtestdbwherecondition”)

我们在实际 *** 作中,为了更方便的使用程序中的某些变量,我们将会用到一个函数:

intsprintf(char*str,constchar*format,?)

这个函数用来格式化我们的字符串,然后将变量按照给你的格式,赋给第一个参数。

我们使用这个方法方法可以很方便的使用我们的变量来对数据库进行 *** 作。例如我们将要进行数据库的查询 *** 作,我们就可以这样使用:

sprintf(sql,”select*fromtestdbwhereusername=‘%s’”,u_name)

然后使用mysql_query(&mysql,sql)进行查询。

MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,属于Oracle旗下产品。MySQL是最流行的关系型数据库管理系统之一,在WEB应用方面,MySQL是最好的RDBMS(RelationalDatabaseManagementSystem,关系数据库管理系统)应用软件之一。

链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。相比于线性表顺序结构, *** 作复杂。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相应的时间复杂度分别是O(logn)和O(1)。

Mysql C API编程步骤

1、首先我们要包含mysql的头文件,并链接mysql动态库。即添加以下语句:

#include <WinSock2.h>// 进行网络编程需要winsock2.h

#include <mysql.h>

#pragma comment(lib, “libmysql.lib”)

2、创建MYSQL变量。如:

MYSQL mysql

3、初始化MYSQL变量。

mysql_init(&mysql)

4、调用mysql_real_connect函数连接Mysql数据库。mysql_real_connect函数的原型如下:

MYSQL * STDCALL mysql_real_connect(MYSQL *mysql, const char *host,const char *user,const char *passwd,const char *db,unsigned int port,const char *unix_socket,unsigned long clientflag)

参数说明:mysql–前面定义的MYSQL变量;host–MYSQL服务器的地址;user–登录用户名;passwd–登录密码;db–要连接的数据库;port–MYSQL服务器的TCP服务端口;unix_socket–unix连接方式,为NULL时表示不使用socket或管道机制;clientflag–Mysql运行为ODBC数据库的标记,一般取0。连接失败时该函数返回0。

5、调用mysql_real_query函数进行数据库查询。mysql_real_query函数的原型如下:

int STDCALL mysql_real_query(MYSQL *mysql, const char *q, unsigned long length)

参数说明:mysql–前面定义的MYSQL变量;q–SQL查询语句;length–查询语句的长度。

查询成功则该函数返回0。

6、通过调用mysql_store_result或mysql_use_result函数返回的MYSQL_RES变量获取查询结果数据。

两个函数的原型分别为:

MYSQL_RES * STDCALL mysql_store_result(MYSQL *mysql)

MYSQL_RES * STDCALL mysql_use_result(MYSQL *mysql)

这两个函数分别代表了获取查询结果的两种方式。第一种,调用mysql_store_result函数将从Mysql服务器查询的所有数据都存储到客户端,然后读取;第二种,调用mysql_use_result初始化检索,以便于后面一行一行的读取结果集,而它本身并没有从服务器读取任何数据,这种方式较之第一种速度更快且所需内存更少,但它会绑定服务器,阻止其他线程更新任何表,而且必须重复执行mysql_fetch_row读取数据,直至返回NULL,否则未读取的行会在下一次查询时作为结果的一部分返回,故经常我们使用mysql_store_result。

7、调用mysql_fetch_row函数读取结果集数据。

上述两种方式最后都是重复调用mysql_fetch_row函数读取数据。mysql_fetch_row函数的原型如下:

MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result)

参数result就是mysql_store_result或mysql_use_result的返回值。

该函数返回MYSQL_ROW型的变量,即字符串数组,假设为row,则row〔i〕为第i个字段的值。当到结果集尾部时,此函数返回NULL。

8、结果集用完后,调用mysql_free_result函数释放结果集,以防内存泄露。mysql_free_result函数的原型如下:

void STDCALL mysql_free_result(MYSQL_RES *result)

9、不再查询Mysql数据库时,调用mysql_close函数关闭数据库连接。mysql_close函数的原型为:

void STDCALL mysql_close(MYSQL *sock)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7303051.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-04
下一篇 2023-04-04

发表评论

登录后才能评论

评论列表(0条)

保存