linux下使用c++操作mysql

关于mysql的基础知识可以参考 mysql基础
首先,需要确保已安装mysql-server,mysql-client,mysql-devel。

一、常用类型介绍

1. MYSQL

用于定义一个mysql对象,便于后续操作确定要操作的数据库是哪一个。

MYSQL mysql;  //mysql标记对应某个数据库

2. MYSQL_ROW

用于定义一个行对象,其内容含有一行的数据。

MYSQL_ROW row;  //row[i]可用于输出该行第i个字段的数据

3. MYSQL_FIELD

用于定义一个存储字段信息的对象。

MYSQL_FIELD *field;  //field->name存储对应字段名称

4. MYSQL_RES

用于定义一个存储数据库检索信息结果的对象。

MYSQL_RES *result;

二、常用函数介绍

其实在操作mysql数据库时,最常使用的函数有以下几个:

1. mysql_init()

用于初始化一个MYSQL对象,来连接mysql服务端。

MYSQL *mysql_init( MYSQL *mysql );//example
MYSQL mysql;
mysql_init( &mysql );

2. mysql_real_connect()

用于连接数据库

MYSQL *mysql_real_connect (MYSQL *mysql,   //初始化的MYSQL对象,与mysql_init()对应const char *host,   //主机地址const char *user,   //用户,例如:rootconst char *passwd,   //数据库的密码const char *db,   //要连接的数据库,例如:studentunsigned int port,   //端口,可填0const char *unix_socket,   //一般为NULLunsigned long client_flag);  //一般为0//example
mysql_real_connect( &mysql, "localhost", "root", "mypasswd", "student", 0, NULL, 0 );

3. mysql_query()

用于执行mysql命令。其参数应使用c风格字符串。

mysql_query( MYSQL *mysql, char * command );//example
string command = "select * from info";
mysql_query( &mysql, command.c_str() );

4. mysql_store_result()

用于获取mysql操作的检索结果。

MYSQL_RES *mysql_store_result(MYSQL *mysql);//example
MYSQL_RES *result;
result = mysql_store_result( &mysql );

5. mysql_num_rows()

用于获取结果集的行数。

mysql_num_rows( MYSQL_RES *result );

6. mysql_num_fields()

用于获取结果集的字段数。

mysql_num_fields( MYSQL_RES *result );//example
int row_num;
row_num = mysql_num_fields( result );

7. mysql_fetch_field()

用于获取下一个字段的类型。

MYSQL_FIELD* mysql_fetch_field(MYSQL_RES *result);

8. mysql_fetch_row()

从结果集中获取下一行,结束返回NULL。

MYSQL_ROW mysql_fetch_row(MYSQL_RES *result); //example
MYSQL_ROW row;
while( row = mysql_fetch_row( result ), row != NULL ) {for( int i = 0; i < num; i++ ) {cout << row[i] << "\t\t";}cout << endl;
}

9. mysql_fetch_field_direct()

给定字段序号,返回字段类型,结束返回NULL。

MYSQL_FIELD* mysql_fetch_field_direct(MYSQL_RES *result, int i); //example
int num = mysql_num_fields( result );  //返回字段个数
for( int i = 0; i < num; i++ ) {field = mysql_fetch_field_direct( result, i );  //返回字段类型cout << field->name << "\t\t";  //输出字段名
}
cout << endl;

10. mysql_close()

用于关闭连接。

mysql_close( MYSQL *mysql );

三、示例代码

#include <iostream>
#include <string>
#include <mysql/mysql.h>
using namespace std;class MysqlDB {
private:MYSQL mysql;MYSQL_ROW row;MYSQL_RES *result;MYSQL_FIELD *field;
public:MysqlDB() {if( mysql_init( &mysql ) == NULL ) {cout << "init error, line: " << __LINE__ << endl;exit(-1);}}~MysqlDB() {mysql_close( &mysql );}void connect( string host, string user, string passwd,  string database ) {if( !mysql_real_connect( &mysql, host.c_str(), user.c_str(), passwd.c_str(), database.c_str(), 0, NULL, 0 ) ) {cout << "connect error, line: " << __LINE__ << endl;exit(-1);}}void add();void print();
};void MysqlDB::add() {string id, name, sex, birthday;do {cout << "请输入学生信息:\n";cin >> id >> name >> sex >> birthday;string sql = "insert into info values('" + id + "', '" + name + "', '" + sex + "', '" + birthday + "');";mysql_query( &mysql, sql.c_str() );cout << "是否继续(y/n): ";cin >> id;} while( id == "y" );
}void MysqlDB::print() {// string sql = "select * from info where name = '" + name + "';";  //要有''string sql = "select * from info;";mysql_query( &mysql, sql.c_str() );result = mysql_store_result( &mysql );if( !result ) {cout << "result error, line : " << __LINE__ << endl;return ;}int num;num = mysql_num_fields( result );  //返回字段个数for( int i = 0; i < num; i++ ) {field = mysql_fetch_field_direct( result, i );  //返回字段类型cout << field->name << "\t\t";  //输出字段名}cout << endl;while( row = mysql_fetch_row( result ), row ) {for( int i = 0; i < num; i++ ) {cout << row[i] << "\t\t";}cout << endl;}
}int main() {MysqlDB db;db.connect( "localhost", "root", "niliushall", "student" );	db.print();db.add();db.print();return 0;
}

编译:

g++ t.cpp `mysql_config --cflags --libs`

参考:
https://blog.csdn.net/tanswer_/article/details/72796570

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/381887.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

初来乍到!各位博客朋友多多支持!

本人真名&#xff1a;陈伟峰baiguli的中文是&#xff1a;白骨礼&#xff0c;意思是做人坦白、真诚、有决心、有毅力、以礼待人。自从有了互联网&#xff0c;个人名称就换来换去&#xff0c;曾经用过&#xff1a;闪电行动、闪电&#xff0c;但QQ号始终没变&#xff1a;23771505。…

java数字转换成字符串

各种数字类型转换成字符串型&#xff1a; String s String.valueOf( value); // 其中 value 为任意一种数字类型。 字符串型转换成各种数字类型&#xff1a; String s "169"; byte b Byte.parseByte( s ); short t Short.parseShort( s ); int i Integer.parseI…

天空的颜色和大气散射

天空的颜色采用"A Practical Analytic Model for Daylight"建造的模型计算。地形颜色的大气散射采用"Rendering Outdoor Lght Scattering in real Time"介绍的方法计算。A Practical Analytic Model for Daylight中的模型通过太阳的方位&#xff0c;Zenith…

hexo本地博客的转移

1. 复制配置文件 将原来的配置文件进行备份&#xff0c;只需要将文件夹 source、themes和配置文件_config.yml备份即可。 2. 安装Node.js sudo apt-get install nodejs sudo apt-get install npm 3. 安装hexo sudo npm install -g hexo 4. 新建文件夹&#xff0c;cd进入 …

K8S 外部访问配置、 Ingress、NodePort

将K8S部署应用提供给外部访问一般有三种方式&#xff1a; NodePort 暴露端口到节点&#xff0c;提供了集群外部访问的入口LoadBalancer 需要负载均衡器&#xff08;通常都需要云服务商提供&#xff0c;裸机可以安装 METALLB 测试&#xff09;Ingress 统一管理 svc的外部访问&am…

java 设计作业——简单计算器

设计要求&#xff1a; 设计一个计算器&#xff0c;用GUI画出来一个图形界面&#xff0c;有两个输入框&#xff0c;一个输出框&#xff0c;有4个加减乘除按钮&#xff0c;实现简单的加减乘除功能。 code&#xff1a; import java.awt.*; import java.awt.event.*; import java.…

有感于最近一个朋友买股票大亏

投资首先是要看退出机制通畅不通畅、其次才是看收益高不高转载于:https://www.cnblogs.com/darzui/archive/2005/12/30/308300.html

ubuntu18重装笔记

再次重装了系统&#xff0c;为方便以后再次重装&#xff0c;&#xff0c;&#xff0c;因此将主要步骤记录下来。 1. 更新源 sudo gedit /etc/apt/sources.list # 阿里源deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb http://mirro…

uva 437——The Tower of Babylon

题意&#xff1a;给定n个长方体&#xff0c;然后堆积最高的塔&#xff0c;要求上面的面积小于下面的面积。 思路&#xff1a;Dp&#xff0c;先把长方体的所有放的情况都构造出来放到数组里&#xff0c;对于当前节点&#xff0c;如果能够在前面找到面积比当前小&#xff0c;高度…

ASP.NET Web 服务、企业服务和 .NET Remoting 的性能

http://www.uml.org.cn/net/200601102.htm转载于:https://www.cnblogs.com/dynasty/archive/2006/01/11/315508.html

线程池的分析与实现

在需要频繁开线程时&#xff0c;创建和销毁线程会话费大量时间&#xff0c;为了提高效率&#xff0c;我们可以在任务开始前&#xff0c;先创建一定数量的线程。这样在接收到任务时&#xff0c;就可以直接使用线程池中处于wait状态的线程&#xff0c;在任务结束后线程回到wait状…

uva 1347——Tour

题意&#xff1a;给定n个点的坐标&#xff0c;设计一条路线&#xff0c;从左边的点出发&#xff0c;走到最右边的点然后返回&#xff0c;每个点除了起点和终点最多只能经历一次&#xff0c;求其中的最短路径。 思路&#xff1a;dp&#xff0c;可以考虑成2个人从起点出发&#x…

基于epoll+threadpool的webServer分析与实现

该webServer使用epollthreadpool实现&#xff0c;支持GET、POST方法&#xff0c;并添加CGI进行数据计算并返回网页信息&#xff0c;可以解析返回html、picture、mp3、js、css等文件&#xff0c;可以实现稳定的运行。 使用c编写。 源码请看我的Github。 流程简述 启动服务器&…

Flex2.0实现文件上传功能(服务器为ASP.NET)

简介&#xff1a;新的Flex2.0类库里提供了文件类&#xff0c;方便了上传/下载文件。下面的程序demo演示了Flex2.0生成flash来访问本地文件&#xff0c;在flash里上传用户选择的文件到服务器&#xff0c;flash客户端可以处理文件上传进度等多个事件&#xff0c;服务器端是C#写的…

UVA 116——Unidirectional TSP

题意&#xff1a;给定一个n*m的矩阵&#xff0c;从第一列任意位置向右&#xff0c;右下&#xff0c;右上走一格&#xff0c;可以循环&#xff0c;要求经过的数字的和最小。 思路&#xff1a;记忆化搜索。每次有三个状态&#xff0c;从这三个状态中选择出最优的一个&#xff0c;…

【高性能定时器】 时间轮

时间轮 简述 顾名思义&#xff0c;时间轮就像一个轮子&#xff0c;在转动的时候外界会指向轮子不同的区域&#xff0c;该区域就可以被使用。因此只要将不同时间的定时器按照一定的方法散列到时间轮的不同槽&#xff08;即时间轮划分的区域&#xff09;之中&#xff0c;就可以实…

知识管理的三种策略

知识管理的三种策略 面向流程的知识管理战略&#xff0d;实施篇&#xff08;上&#xff09;(AMT研究院 周瑛 编译) 转载于:https://www.cnblogs.com/yangfada/archive/2006/01/24/322381.html

java 考试复习整理——JAVA类和类成员的修饰符

今天整理了一下以前学的JAVA的类和类成员的修饰符&#xff0c;考试的时候可能会考到。一&#xff1a;访问修饰符&#xff1a;1.省略访问修饰符&#xff1a;具有默认的访问特性&#xff0c;即具有包访问特性&#xff0c;只能被同一个包中的类使用。2.public访问修饰符&#xff1…

【安利】程序猿作图神器 - Graphviz

还在为在linux下画二叉树等图苦恼吗&#xff0c;现在就安利一波linux程序猿的作图神器——Graphviz。&#xff08;本来在写其他东西&#xff0c;刚好要绘图&#xff0c;强行插入一篇blog&#xff09; Graphviz (Graph Visualization Software) 是一个由AT&T实验室启动的开源…

仿ISQL功能的实现,可以实现批处理功能

具体请见下载文件&#xff1a;/Files/bigmouthz/DNet写的数据库isql执行程序&#xff08;含源码&#xff09;.rar部分代码如下&#xff1a; DBCore.DataBaseVisitor.AbsDBHelper dbhelper null ; private void bt_DBLink_Click(object sender, System.EventArgs e) { try …