Linux下 C++ 访问 MySQL 数据库
2016-04-14 18:14
681 查看
转载出处:http://blog.csdn.net/lisonglisonglisong/article/details/25071793
由于想要开始了解并学习用LAMP进行web开发,所以昨晚我在Fedora上安装了MySQL,学习了MySQL的几个常用命令。想着在学习进行web开发(PHP访问数据库)之前,先用我熟悉的C++连接数据库试试。由于以前只接触过SQL Server,所以在网上查了很多资料,这里记录一下,以备后用。
一,安装MySQL
当然在使用MySQL之前,首先需要安装。我的linux发行版是Fedora 20,所以我先在MySQL官网下了一个通用版的MySQL-5.6.17-1.linux_glibc2.5.x86_64.rpm-bundle.rar,然后用归档管理器提取出来以后,发现里面有7个rpm文件,我们要使用MySQL数据库,只需要安装MySQL-server和MySQL-client就行了。具体的安装完了以后的设置密码我就不多说了。安装好了以后,在终端输入mysql
-u root -p就可以进入mysql操作环境了。
二,C/C++连接MySQL
连接MySQL数据库有两种方法:第一种是使用ADO连接,不过这种只适合Windows平台;第二种是使用MySQL自己的C API函数连接数据库。
这里我们说的就是使用MySQL的C API函数访问MySQL数据库。C API代码是与MySQL一起提供的,它包含在mysqlclient库中,并允许C/C++程序访问数据库。具体的数据类型和函数描述可以去看MySQL官网的MySQL_C_API参考手册。
这里的例子有使用到几个函数:
基本步骤就是:
使用mysql_init()初始化连接
使用mysql_real_connect()建立一个到mysql数据库的连接
使用mysql_query()执行查询语句
result = mysql_use_result(conn)获取结果集
mysql_field_count(conn)获取查询的列数,mysql_num_fields(result)获取结果集的字段数
通过mysql_fetch_row(result)不断获取下一行,然后循环输出
释放结果集所占内存mysql_free_result(result)
mysql_close(conn)关闭连接
测试程序:
运行 ./test
结果:
![](http://img.blog.csdn.net/20160414200032907)
三,创建所需数据库
通过C++查询数据库的数据,当然你得创建所需数据库,可以通过代码创建,也可以在终端创建数据库。首先通过用户名和密码进入mysql:
[plain] view
plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
mysql -u root -p
1,查看所有数据库:
[sql] view
plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.00 sec)
MySQL默认有自带的数据库,mysql库存放着mysql的系统和用户权限信息,我们改密码和新增用户,实际上就是对这个库进行操作。
2,创建数据库:
[sql] view
plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
mysql> CREATE DATABASE student;
Query OK, 1 row affected (0.00 sec)
3,建表:
[sql] view
plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
mysql> CREATE TABLE student_info(
-> stu_num CHAR(20) NOT NULL,
-> stu_name CHAR(10) NOT NULL,
-> stu_age int NOT NULL,
-> stu_grade CHAR(5) NOT NULL,
-> stu_score int,
-> PRIMARY KEY(stu_num));
Query OK, 0 rows affected (0.38 sec)
4,查看所有数据表
[sql] view
plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
mysql> use student;
Database changed
mysql> show tables;
+-------------------+
| Tables_in_student |
+-------------------+
| student_info |
+-------------------+
1 row in set (0.00 sec)
5,查看数据表的结构(字段)
[sql] view
plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
mysql> describe student_info;
+-----------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+----------+------+-----+---------+-------+
| stu_num | char(20) | NO | PRI | NULL | |
| stu_name | char(10) | NO | | NULL | |
| stu_age | int(11) | NO | | NULL | |
| stu_grade | char(5) | NO | | NULL | |
| stu_score | int(11) | YES | | NULL | |
+-----------+----------+------+-----+---------+-------+
5 rows in set (0.10 sec)
6,插入数据
[sql] view
plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
mysql> INSERT INTO student_info VALUES("U201018113", "SongLee", 23, "1007", 85);
Query OK, 1 row affected (0.10 sec)
7,查询数据
[sql] view
plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
mysql> SELECT * FROM student_info;
+------------+----------+---------+-----------+-----------+
| stu_num | stu_name | stu_age | stu_grade | stu_score |
+------------+----------+---------+-----------+-----------+
| U201018113 | SongLee | 23 | 1007 | 85 |
+------------+----------+---------+-----------+-----------+
1 row in set (0.00 sec)
由于想要开始了解并学习用LAMP进行web开发,所以昨晚我在Fedora上安装了MySQL,学习了MySQL的几个常用命令。想着在学习进行web开发(PHP访问数据库)之前,先用我熟悉的C++连接数据库试试。由于以前只接触过SQL Server,所以在网上查了很多资料,这里记录一下,以备后用。
一,安装MySQL
当然在使用MySQL之前,首先需要安装。我的linux发行版是Fedora 20,所以我先在MySQL官网下了一个通用版的MySQL-5.6.17-1.linux_glibc2.5.x86_64.rpm-bundle.rar,然后用归档管理器提取出来以后,发现里面有7个rpm文件,我们要使用MySQL数据库,只需要安装MySQL-server和MySQL-client就行了。具体的安装完了以后的设置密码我就不多说了。安装好了以后,在终端输入mysql
-u root -p就可以进入mysql操作环境了。
二,C/C++连接MySQL
连接MySQL数据库有两种方法:第一种是使用ADO连接,不过这种只适合Windows平台;第二种是使用MySQL自己的C API函数连接数据库。
这里我们说的就是使用MySQL的C API函数访问MySQL数据库。C API代码是与MySQL一起提供的,它包含在mysqlclient库中,并允许C/C++程序访问数据库。具体的数据类型和函数描述可以去看MySQL官网的MySQL_C_API参考手册。
这里的例子有使用到几个函数:
mysql_init() | 获取或初始化MYSQL结构 |
mysql_real_connect() | 连接到MySQL服务器。 |
mysql_query() | 执行指定为“以Null终结的字符串”的SQL查询。 |
mysql_use_result() | 初始化逐行的结果集检索。 |
mysql_field_count() | 返回上次执行语句的结果集的列数。 |
mysql_fetch_row() | 从结果集中获取下一行 |
mysql_num_fields() | 返回结果集中的字段数 |
使用mysql_init()初始化连接
使用mysql_real_connect()建立一个到mysql数据库的连接
使用mysql_query()执行查询语句
result = mysql_use_result(conn)获取结果集
mysql_field_count(conn)获取查询的列数,mysql_num_fields(result)获取结果集的字段数
通过mysql_fetch_row(result)不断获取下一行,然后循环输出
释放结果集所占内存mysql_free_result(result)
mysql_close(conn)关闭连接
测试程序:
int main() { const char *host = "localhost"; const char *user = "root"; const char *pass = "password"; const char *db = "test"; MYSQL mysql; mysql_init(&mysql); if (!mysql_real_connect(&mysql, host, user, pass, db, 0, NULL, 0)) { printf("%s", mysql_error(&mysql)); } else { printf("YES, Conected succeed!\n"); } mysql_close(&mysql); return 0; }编译 g++ main.cpp -o test -lmysqlclient
运行 ./test
结果:
三,创建所需数据库
通过C++查询数据库的数据,当然你得创建所需数据库,可以通过代码创建,也可以在终端创建数据库。首先通过用户名和密码进入mysql:
[plain] view
plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
mysql -u root -p
1,查看所有数据库:
[sql] view
plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.00 sec)
MySQL默认有自带的数据库,mysql库存放着mysql的系统和用户权限信息,我们改密码和新增用户,实际上就是对这个库进行操作。
2,创建数据库:
[sql] view
plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
mysql> CREATE DATABASE student;
Query OK, 1 row affected (0.00 sec)
3,建表:
[sql] view
plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
mysql> CREATE TABLE student_info(
-> stu_num CHAR(20) NOT NULL,
-> stu_name CHAR(10) NOT NULL,
-> stu_age int NOT NULL,
-> stu_grade CHAR(5) NOT NULL,
-> stu_score int,
-> PRIMARY KEY(stu_num));
Query OK, 0 rows affected (0.38 sec)
4,查看所有数据表
[sql] view
plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
mysql> use student;
Database changed
mysql> show tables;
+-------------------+
| Tables_in_student |
+-------------------+
| student_info |
+-------------------+
1 row in set (0.00 sec)
5,查看数据表的结构(字段)
[sql] view
plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
mysql> describe student_info;
+-----------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+----------+------+-----+---------+-------+
| stu_num | char(20) | NO | PRI | NULL | |
| stu_name | char(10) | NO | | NULL | |
| stu_age | int(11) | NO | | NULL | |
| stu_grade | char(5) | NO | | NULL | |
| stu_score | int(11) | YES | | NULL | |
+-----------+----------+------+-----+---------+-------+
5 rows in set (0.10 sec)
6,插入数据
[sql] view
plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
mysql> INSERT INTO student_info VALUES("U201018113", "SongLee", 23, "1007", 85);
Query OK, 1 row affected (0.10 sec)
7,查询数据
[sql] view
plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
mysql> SELECT * FROM student_info;
+------------+----------+---------+-----------+-----------+
| stu_num | stu_name | stu_age | stu_grade | stu_score |
+------------+----------+---------+-----------+-----------+
| U201018113 | SongLee | 23 | 1007 | 85 |
+------------+----------+---------+-----------+-----------+
1 row in set (0.00 sec)
相关文章推荐
- Linux与windows区别
- RHEL下使用CENTOS的YUM源
- [Linux]cmd to use
- 【centos】安装ELK之kibana
- linux下杀死进程(kill)的N种方法
- Linux PS 详解
- Linux中madplay 音乐播放器移植步骤(在ubuntu中编译)
- Linux 第八周实验 进程的切换和系统的一般执行过程
- 【centos】安装ELK之ElasticSearch
- Linux 命令神器:lsof 入门
- [ Iptables ] Linux开启防火墙,切记仔细确定每个端口
- Linux常见命令集锦
- Linux常见命令集锦
- Linux入侵检查实用指令
- 一次Linux系统被攻击的分析过程
- centos7 LV XFS添加磁盘
- Linux下Nodejs安装(完整详细)
- CentOS下搭建测试环境
- linux中硬链接与符号链接(软链接)的关系
- linux gdb 调试 coredump core 文件,函数名称是 问号