C++连接数据库
2016-05-31 23:35
351 查看
连接数据库的几个API
1. MYSQL *mysql_init(MYSQL *mysql); MYSQL *mysql_init(NULL);
为mysql_real_connect()分配或初始化一个MYSQL对象,若mysql 为NULL,函数为其分配,初始化并返回一个新对象. 否则对象被初始化并返回该对象的地址.
返回值:一个被初始化了的MYSQL *handle,若内存不足返回NULL.
2.int mysql_options(MYSQL *mysql,enum mysql_option,const void *arg)
为连接设置一些连接项,必须在mysql_init()之后,mysql_real_connect()之前使用这个函数. 具体各个参数详见百度百科
3.MYSQL *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 int client_flag);
参数的意思分别是已经初始化了的MYSQL对象,主机名,用户名,密码,数据库名,端口,unix_sock,client_flag; 在调用该函数之前,必须先调用mysql_init()初始化MYSQL结构体.
4.int mysql_query(MYSQL *mysql,const *stmt_str); int mysql_real_query(MYSQL *mysql,unsigned long length);
mysql_query执行由stmt_str指向的SQL语句,不能执行包含二进制的SQL语句(字符”\0”是二进制数据),但mysql_real_query()指定以分号分隔的多个SQL语句. 也可以调用mysql_real_connect()或mysql_set_server_option()指定以分号分隔的多个SQL语句.
返回值:SQL语句执行成功返回0,出错返回非0;
MYSQL_RES *mysql_use_result(MYSQL *mysql); MYSQL_RES *mysql_store_result(MYSQL *mysql); 在调用mysql_query()或mysql_real_query()之后,必须调用mysql_free_result()释放结果集.初始化一个结果检索,但是并不像mysql_store_result()那样把结果集读到client,而是通过mysql_fetch_row()进行逐行检索,直到返回一个NULL. 直接从server读取,节省时间和空间. 返回值:成功返回一个MYSQL_RES结构体,出错返回NULL
5.int mysql_next_result(MYSQL *mysql);
该函数用来在由多个SQL语句构成的单独语句字符串时执行,在每次调用该函数之前,一定要使用mysql_use_result()释放当前语句的结果集.
6.MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);
检索结果集中的下一行.
7.int mysql_num_fields(MYSQL_RES *result);
每行的值的个数可由mysql_num_fields(result)获知,如果row保存mysql_fetch_row()的返回值,则指向值的指针是row[0] to row[mysql_num_fields(result)-1];
8.void mysql_close(MYSQL *mysql);
关闭先前打开的连接,同时也释放由mysql指向的连接handle,若handle是由mysql_init() or mysql_connect()分配的.
代码如下:
mysql.h #pragma once //这是一个比较常用的C/C++杂注,只要在头文件中的最开始加入这条杂注,就能保证头文件只被编译一次. #include<string> #include<mysql/mysql.h> class MySql { public: //构造函数用来初始化mysql和连接数据库 MySql(const std::string iP,const std::string name,const std::string passwd,const std::string database); //析构函数用来做数据库的善后处理 ~MySql(); //对数据库进行sql操作 bool operate(const std::string &operation); //获取行 MYSQL_ROW getRow(void); //获取列数 int getColNum(void); //得到每行的列数. void freeResult(void); // void print_result(void); //打印查询结果 bool InsertData(const std::string &operation); //插入数据 bool ModifyData(const std::string &operation); //修改数据 bool DeleteData(const std::string &operation); //删除数据 //释放保存在该连接的操作 private: std::string server_ip; //数据库地址 std::string user_name; //用户名 std::string password; //用户密码 std::string database_name; //数据库名 private: MYSQL *mysql_conn; MYSQL_RES *mysql_res; MYSQL_ROW mysql_row; };
mysql.cpp
#include<iostream> #include<string> #include<mysql/mysql.h> #include"mysql.h" #include<stdio.h> using namespace std; MySql::MySql(const std::string ip,const std::string name,const std::string passwd,const std::string database) { server_ip=ip; user_name=name; password=passwd; database_name=database; //初始化mysql mysql_conn=mysql_init(NULL); //连接mysql if(!mysql_real_connect(mysql_conn,server_ip.c_str(),user_name.c_str(),password.c_str(),database_name.c_str(),0,NULL,0)) //后面三个参数分别是port,unix_socket,client_flag. { std::cout<<"mysql连接失败"<<std::endl; exit(1); }else{ cout <<"mysql连接成功"<<endl; } } //操作函数 bool MySql::operate(const std::string &operation) { if(mysql_query(mysql_conn,operation.c_str())) { std::cout<<"mysql操作失败"<<std::endl; return false; } //将操作结果存储在结果集 mysql_res=mysql_use_result(mysql_conn); mysql_free_result(mysql_res); return true; } MYSQL_ROW MySql::getRow(void) { return mysql_fetch_row(mysql_res); } int MySql::getColNum(void) { return mysql_num_fields(mysql_res); } void MySql::print_result(void) { //获得每行的字段数 int num=mysql_num_fields(mysql_res); //循环读取所有的行 while((mysql_row=mysql_fetch_row(mysql_res))!=NULL){ //将每行字段都读出来. for(int i=0;i<num;i++){ cout << mysql_row[i]<<" "; } cout << endl; } } bool MySql::InsertData(const std::string &operation) { if(mysql_query(mysql_conn,operation.c_str())){ cout << "mysql操作失败!"<<endl; exit(1); }else{ cout << "mysql连接成功"<<endl; } /*mysql_res=mysql_use_result(mysql_conn); mysql_free_result(mysql_res);*/ } bool MySql::ModifyData(const std::string &operation){ if(mysql_query(mysql_conn,operation.c_str())){ cout << "mysql操作失败"<<endl; exit(1); }else{ cout << "mysql连接成功"<<endl; } } bool MySql::DeleteData(const std::string &operation){ if(mysql_query(mysql_conn,operation.c_str())){ cout <<"mysql操作失败"<<endl; exit(1); }else{ cout << "mysql连接成功"<<endl; } } MySql::~MySql() { //释放存储结果 mysql_free_result(mysql_res); //关闭mysql连接 mysql_close(mysql_conn); cout << "数据库关闭成功"<<endl; } int main(int argc,char *argv[]) { MySql mysql("127.0.0.1","root","429256","zuoye3"); //mysql.operate("select * from orders"); //mysql.print_result(); // mysql.InsertData("insert into yang values(NULL,'yang',21)"); //mysql.ModifyData("update yang set name='feifei' where id=1"); mysql.DeleteData("delete from yang where id=2"); return 0; }
相关文章推荐
- MySQL中的integer 数据类型
- MySQL存储过程
- mysql中int、bigint、smallint 和 tinyint的区别与长度
- mysql load data 导出、导入 csv
- source命令执行SQL脚本文件
- MySQL创建用户及权限控制
- MySQL管理数据表
- linux下mysql添加用户
- mysql procedure
- mysql触发器
- MySQL 备份和恢复策略
- mac下安装mysql(转载)
- mysql 修改编码 Linux/Mac/Unix/通用(杜绝修改后无法启动的情况!)
- MySQL数据的导出、导入(mysql内部命令:mysqldump、mysql)
- mysql数据行转列
- Linux下修改MySQL编码的方法
- MySQL Server 日志
- MySQL 安全事宜
- MySQL 备份与恢复