文档章节

c++ 通过mysql_real_connect()连接数据库

rose_willow
 rose_willow
发布于 2017/04/21 15:10
字数 1724
阅读 312
收藏 0

Linux下C++连MySQL数据库

  1.查看本地有没有安装mysql,命令就是mysql,如果有这个命令就表示安装了mysql数据库软件。如果没有就自行安装。   MySQL-server-4.0.16-0.i386.rpm      MySQL-client-4.0.16-0.i386.rpm

  2.查看本地有没有安装mysql的开发包。命令是 mysql_config --cflags --libs 如果有安装就会有一串编译选项和连接库。如果没有就自行安装 mysql-devel-*****的rpm包 后面是版本号。mysql开发包提供了基本操作接口。安装后头文件在/usr/include/mysql 而动态库在 /usr/lib/mysql 上。

  3.创建一个用于练习的数据库test.进入mysql> 然后依次输入:

    mysql>create database test;

    mysql>use test; //切换到test数据库中

    mysql> create table test(name varchar(255),num int(10) ); //创建一个叫test的表

    mysql>show create table test; //显示刚才创建的表信息

    mysql> select * from test;   //查询test表中数据

    mysql>quit

  4.编写一个c++程序,代码如下: 复制代码

1 #include <stdio.h>

2 #include <mysql.h>

3

4 int main(int argc,char *argv[])

5 {

6 MYSQL conn;

7 int res;

8 mysql_init(&conn);

9 if(mysql_real_connect(&conn,"localhost","root","","test",0,NULL,CLIENT_FOUND_ROWS)) //"root":数据库管理员 "":root密码 "test":数据库的名字

10 {

11   printf("connect success!\n");

12   res=mysql_query(&conn,"insert into test values('user','123456')");

13   if(res)

14   {

15    printf("error\n");

16   }

17   else

18   {

19   printf("OK\n");

20   }

21   mysql_close(&conn);

22 }

23 return 0;

24 }

复制代码

  代码不是很难理解,就不解释了。

  5.编译程序

  使用的编译代码(注意哪两个不是单引号而是反单引号)

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

  

  6.运行代码

    ./test

  7.再次查看数据库

    mysql>use test;

    mysql>select * from test;

    这样就可以查看到插入的信息了。

输入图片说明

================我是分割线============================ 完整代码

  其实数据库的增加,删除,更新等操作比较简单,都是返回一个值表示成功与否。而查询比较麻烦。返回一个结果集,所以操作起来比较麻烦!


头文件

#include<mysql.h>

函数原型

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 long client_flag )

函数说明

mysql_real_connect()尝试与运行在主机上的MySQL数据库引擎建立连接。在你能够执行需要有效MySQL连接句柄结构的任何其他API函数之前,mysql_real_connect()必须成功完成。

参数的指定方式如下:

第1个参数应是已有MYSQL结构的地址。调用mysql_real_connect()之前,必须调用mysql_init()来初始化MYSQL结构。通过mysql_options()调用,可更改多种连接选项。 “host”的值必须是主机名或IP地址。如果“host”是NULL或字符串"localhost",连接将被视为与本地主机的连接。如果操作系统支持套接字(Unix)或命名管道(Windows),将使用它们而不是TCP/IP连接到服务器。 “user”参数包含用户的MySQL登录ID。如果“user”是NULL或空字符串"",用户将被视为当前用户。在UNIX环境下,它是当前的登录名。在Windows ODBC下,必须明确指定当前用户名。 “passwd”参数包含用户的密码。如果“passwd”是NULL,仅会对该用户的(拥有1个空密码字段的)用户表中的条目进行匹配检查。这样,数据库管理员就能按特定的方式设置MySQL权限系统,根据用户是否拥有指定的密码,用户将获得不同的权限。 注释 调用mysql_real_connect()之前,不要尝试加密密码,密码加密将由客户端API自动处理。 “db”是数据库名称。如果db为NULL,连接会将默认的数据库设为该值。 如果“port”不是0,其值将用作TCP/IP连接的端口号。注意,“host”参数决定了连接的类型。 如果unix_socket不是NULL,该字符串描述了应使用的套接字或命名管道。注意,“host”参数决定了连接的类型。 client_flag的值通常为0,但是,也能将其设置为下述标志的组合,以允许特定功能: 标志名称

标志描述 CLIENT_COMPRESS

使用压缩协议。 CLIENT_FOUND_ROWS

返回发现的行数(匹配的),而不是受影响的行数。 CLIENT_IGNORE_SPACE

允许在函数名后使用空格。使所有的函数名成为保留字。 CLIENT_INTERACTIVE

关闭连接之前,允许interactive_timeout秒的不活动时间。 CLIENT_LOCAL_FILES

允许LOAD DATA LOCAL处理功能。 CLIENT_MULTI_STATEMENTS

通知服务器,客户端可能在单个字符串内发送多条语句。 CLIENT_MULTI_RESULTS

通知服务器,客户端能够处理来自多语句执行。 CLIENT_NO_SCHEMA

禁止db_name.tbl_name.col_name语法。 CLIENT_ODBC

客户端是ODBC客户端。它将mysqld变得更为ODBC友好。 CLIENT_SSL

使用SSL,该选项不应由应用程序设置,而是在客户端库内部设置。 对于某些参数,能够从选项文件获得取值,而不是取得mysql_real_connect()调用中的确切值。为此,在调用mysql_real_connect()之前,应与MYSQL_READ_DEFAULT_FILE或MYSQL_READ_DEFAULT_GROUP选项一起调用mysql_options()。随后,在mysql_real_connect()调用中,为准备从选项文件读取值的每个参数指定“无值”值: 对于host,指定NULL值或空字符串("")。 对于user,指定NULL值或空字符串。 对于passwd,指定NULL值。(对于密码,mysql_real_connect()调用中的空字符串的值不能被选项文件中的字符串覆盖,这是因为,空字符串明确指明MySQL账户必须有空密码)。 对于db,指定NULL值或空字符串 对于port,指定“0”值。 对于unix_socket,指定NULL值。 对于某一参数,如果在选项文件中未发现值,将使用它的默认值,如本节前面介绍的那样。 返回值 如果连接成功,返回MYSQL*连接句柄。如果连接失败,返回NULL。对于成功的连接,返回值与第1个参数的值相同。 错误 CR_CONN_HOST_ERROR 无法连接到MySQL服务器。 CR_CONNECTION_ERROR 无法连接到本地MySQL服务器。 CR_IPSOCK_ERROR 无法创建IP套接字。 CR_OUT_OF_MEMORY 内存溢出。 CR_SOCKET_CREATE_ERROR 无法创建Unix套接字。 CR_UNKNOWN_HOST 无法找到主机名的IP地址。 CR_VERSION_ERROR 协议不匹配,起因于:试图连接到具有特定客户端库(该客户端库使用了不同的协议版本)的服务器。如果使用很早的客户端库来建立与较新的服务器(未使用“--old-protocol”选项开始的)的连接,就会出现该情况。 CR_NAMEDPIPEOPEN_ERROR 无法在Windows平台下创建命名管道。 CR_NAMEDPIPEWAIT_ERROR 在Windows平台下等待命名管道失败。 CR_NAMEDPIPESETSTATE_ERROR 在Windows平台下获取管道处理程序失败。 CR_SERVER_LOST 如果connect_timeout> 0,而且在连接服务器时所用时间长于connect_timeout秒,或在执行init-command时服务器消失。 范例

#include<stdio.h> #include<mysql.h> int main() { MYSQL mysql; mysql_init(&mysql); if(!mysql_real_connect(&mysql,"host","user","passwd","database",0,NULL,0)) { fprintf(stderr,"Failedtoconnecttodatabase:Error:%s\n",mysql_error(&mysql)); } mysql_close(&mysql); return 0; }

© 著作权归作者所有

rose_willow
粉丝 0
博文 90
码字总数 15682
作品 0
石家庄
运营/编辑
私信 提问
坑爹的MYSQL CONNECTOR C++

近来要开发C++连接mysql的一个模块,首先在官网上下了一个Connector C++ 1.1.0,发现竟然要用到boost库...为了一个连接组件,竟然要安装整个boost,而且看了下Connector的源代码,发现竟然只...

xinzaibing
2012/07/24
3.8K
5
网络与服务器编程框架库 acl_3.0.12 发布

acl 3.0.12 版本 (项目主页:https://sourceforge.net/projects/acl/, 技术文章主页:http://zsxxsz.ietye.com/) 发布了,acl 是 one Advanced C/C++ library 的简称,主要包括网络通信库以及...

郑树新
2013/10/03
1K
0
MFC链接MYSQL连接出错

TAT,想写个MFC用MYSQL做数据库,结果写出来后报错: 1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sql.h(649): error C2143: 语法错误 : 缺少“)”(在“常量”的前面) 1...

EVA楚轩复制体
2013/03/16
568
2
网络与服务器编程框架库 acl_3.0.13 发布

acl 3.0.13 版本 (项目主页:https://sourceforge.net/projects/acl/) 发布了,acl 是 one Advanced C/C++ library 的简称,主要包括网络通信库以及服务器框架库等功能,支持 Linux/Windows ...

郑树新
2013/11/04
1K
6
MySQL Connector/C++ 1.1 发布

MySQL Connector/C++ 是 C/C++ 用来连接到 MySQL 数据库的客户端开发包。 1.1 版本改进内容请看 Change History 更多关于 Connector/C++ 的文档:http://dev.mysql.com/doc/refman/5.1/en/co...

红薯
2010/09/14
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

nginx学习之模块

1、 stub_status模块: 用于展示nginx处理连接时的状态。 配置语法如下: Syntax:stub_status;Default:默认没有配置Context:server、location 可以编辑default.conf,加上如下配置: ...

码农实战
47分钟前
4
0
MySQL,必须掌握的6个知识点

目录 一、索引B+ Tree 原理 MySQL 索引 索引优化 索引的优点 索引的使用条件 二、查询性能优化使用 Explain 进行分析 优化数据访问 重构查询方式 三、存储引擎InnoDB MyISAM 比较 四、数据类...

李红欧巴
51分钟前
4
0
堆”和“栈

C++作为一款C语言的升级版本,具有非常强大的功能。它不但能够支持各种程序设计风格,而且还具有C语言的所有功能。我们在这里为大家介绍的是其中一个比较重要的内容,C++内存区域的基本介绍。...

SibylY
今天
4
0
总结:Https

一、介绍 简单理解,https即在http协议的基础上,增加了SSL协议,保障数据传输的安全性。 它由以前的http—–>tcp,改为http——>SSL—–>tcp;https采用了共享密钥加密+公开密钥加密的方式 ...

浮躁的码农
今天
6
0
数据库表与表之间的一对一、一对多、多对多关系

表1 foreign key 表2 多对一:表 1 的多条记录对应表 2 的一条记录 利用foreign key的原理我们可以制作两张表的多对多,一对一关系 多对多: 表1的多条记录可以对应表2的一条记录 表2的多条记...

Garphy
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部