C++程序调用mysql数据库

1.int mysql_library_init(int argc, char **argv, char **groups)

在调用任何其他MySQL函数之前,调用此函数初始化MySQL客户端库。

2.void mysql_library_end(void)

完成使用库后调用它(例如,在断开与服务器的连接后)。

#include <mysql/mysql.h>
#include <iostream>
using namespace std;

int main() 
{
  if (mysql_library_init(0, NULL, NULL)) {
    fprintf(stderr, "could not initialize MySQL client library\n");
    exit(1);
  }

  /* Use any MySQL API functions here */

  mysql_library_end();

  return 0;
}

3.MYSQL *mysql_init(MYSQL *mysql)

初始化一个用于连接的对象,如果 mysqlNULL指针,则函数分配,初始化并返回新对象。否则,初始化对象并返回对象的地址。如果 mysql_init()分配新对象,则在mysql_close()调用它以关闭连接时将释放该对象 。

4.void mysql_close(MYSQL *mysql)

关闭先前打开的连接。

5.int mysql_options(MYSQL *mysql, enum mysql_option option, const void *arg)

可用于设置额外的连接选项并影响连接的行为。可以多次调用此函数以设置多个选项。要检索选项值,可使用mysql_get_option()

6.MYSQL *mysql_real_connect(

MYSQL *mysql,                   //现有MYSQL结构的地址

const char *host,                //主机名或IP地址

const char *user,                //用户的MySQL登录ID

const char *passwd,           //密码

const char *db,                   //数据库名称

unsigned int port,               //如果port不为0,则该值用作TCP / IP连接的端口号

const char *unix_socket,   //如果unix_socket不是 NULL,则字符串指定要使用的套接字或命名管道

unsigned long client_flag) //client_flag通常为0,但可以设置为特定组合以启用某些功能

尝试连接正在运行的mysql的host, mysql_real_connect()必须先成功完成,然后才能执行需要有效MYSQL连接的任何其他API函数。

7.int mysql_query(MYSQL *mysql, const char *stmt_str)

执行sql语句,第二个参数是包含sql语句的字符串数组或字符指针

8.MYSQL_RES *mysql_store_result(MYSQL *mysql)

在任何有结果集的mysql_query()调用之后需要再调用mysql_store_result()来获得结果,

9.my_ulonglong mysql_num_rows(MYSQL_RES *result)

结果集中的行数

10.unsigned int mysql_num_fields(MYSQL_RES *result)

返回结果集中的列数

11.MYSQL_FIELD *mysql_fetch_field_direct(MYSQL_RES *result, unsigned int fieldnr)

使用此函数可以检索任意列的定义

12.MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)

检索结果集的下一行

13.MYSQL_RES *mysql_list_dbs(MYSQL *mysql, const char *wild)

返回由服务器上与wild参数指定的简单正则表达式匹配的数据库名称组成的结果集,调用 mysql_list_dbs()类似于执行查询 SHOW DATABASES [LIKE wild]

14.bool mysql_change_user(MYSQL *mysql, const char *user, const char *password, const char *db)

更改用户并使指定的数据库 db成为指定连接

15.void mysql_free_result(MYSQL_RES *result)

完成结果集后,必须通过调用释放它使用的内存,释放后不要尝试访问结果集

示例代码:test.cpp

#include <mysql/mysql.h>
#include <iostream>

using namespace std;

int Mysqltest()
{
	MYSQL mydata;
	//初始化
	if (0 == mysql_library_init(0, NULL, NULL)) {
		std::cout << "mysql_library_init() succeed" << std::endl;
	}
	else {
		std::cout << "mysql_library_init() failed" << std::endl;
	}
	if (NULL != mysql_init(&mydata)) {
		std::cout << "mysql_init(mydata) succeed" << std::endl;
	}
	else {
		std::cout << "mysql_init(mydata) failed" << std::endl;
		return -1;
	}
	//处理中文
	if (0 == mysql_options(&mydata, MYSQL_SET_CHARSET_NAME, "utf8")) {
		std::cout << "mysql_options() succeed" << std::endl;
	}
	else {
		std::cout << "mysql_options() failed" << std::endl;
	}
	//连接数据库
	if (NULL != mysql_real_connect(&mydata, "localhost", "root", "12345", "test", 3306, NULL, 0)) {
		std::cout << "mysql_real_connect() succeed" << std::endl;
	}
	else {
		std::cout << "mysql_real_connect() failed" << std::endl;
		return -1;
	}
	std::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())) {
		std::cout << "mysql_query() create table succeed" << std::endl;
	}
	else {
		std::cout << "mysql_query() create table failed" << std::endl;
		mysql_close(&mydata);
		return -1;
	}
	//插入数据
	for (int i = 0; i < 5; i++) {
		sqlstr = "INSERT INTO test.new_paper(NewID,NewCaption,NewContent,NewTime)";
		sqlstr += "VALUES(default,'小明','吃了两个西瓜','2017-01-11');";
		if (0 == mysql_query(&mydata, sqlstr.c_str())) {
			std::cout << "mysql_query() insert data succeed" << std::endl;
		}
		else {
			std::cout << "mysql_query() insert data failed" << std::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())) {
		std::cout << "mysql_query() select data succeed" << std::endl;
		result = mysql_store_result(&mydata);
		int rowcount = mysql_num_rows(result);
		std::cout << "row count:" << rowcount << std::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);
			std::cout << field->name << "\t\t";
		}
		std::cout << std::endl;

		MYSQL_ROW row = NULL;
		row = mysql_fetch_row(result);
		while (NULL != row) {
			for (int i = 0; i < fieldcount; i++) {
				std::cout << row[i] << "\t\t";
			}
			std::cout << std::endl;
			row = mysql_fetch_row(result);
		}
	}
	else {
		std::cout << "mysql_query() select data failed" << std::endl;
		mysql_close(&mydata);
		return -1;
	}
	//删除表
	sqlstr = "DROP TABLE test.new_paper";
	if (0 == mysql_query(&mydata, sqlstr.c_str())) {
		std::cout << "mysql_query() drop table succeed" << std::endl;
	}
	else {
		std::cout << "mysql_query() drop table failed" << std::endl;
		mysql_close(&mydata);
		return -1;
	}
	mysql_free_result(result);
	mysql_close(&mydata);
	mysql_library_end();
	/*我做的时候是一块一块编译的,怕哪里出错,后面的暂停和输入都是为了看错误*/

	return 0;
}

int main()
{
	Mysqltest();
	return 0;
}

编译:

g++ test.cpp `mysql_config --cflags --libs` -o test

运行结果:

fs@ubuntu:~$ ./test
mysql_library_init() succeed
mysql_init(mydata) succeed
mysql_options() succeed
mysql_real_connect() succeed
mysql_query() create table succeed
mysql_query() insert data succeed
mysql_query() insert data succeed
mysql_query() insert data succeed
mysql_query() insert data succeed
mysql_query() insert data succeed
mysql_query() select data succeed
row count:5
NewID		NewCaption		NewContent		NewTime		
1		小明		吃了两个西瓜		2017-01-11 00:00:00		
2		小明		吃了两个西瓜		2017-01-11 00:00:00		
3		小明		吃了两个西瓜		2017-01-11 00:00:00		
4		小明		吃了两个西瓜		2017-01-11 00:00:00		
5		小明		吃了两个西瓜		2017-01-11 00:00:00	
mysql_query() drop table succeed

注:使用完数据库之后一定不要忘记释放内存和断开连接,关闭数据库!(mysql_free_result()、mysql_close()、mysql_library_end())

猜你喜欢

转载自blog.csdn.net/Leo_csdn_/article/details/82682839