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++程序,代码如下:

 #include <stdio.h>
#include <mysql.h> int main(int argc,char *argv[])
{
MYSQL conn;
int res;
mysql_init(&conn);
if(mysql_real_connect(&conn,"localhost","root","","test",,NULL,CLIENT_FOUND_ROWS)) //"root":数据库管理员 "":root密码 "test":数据库的名字
{
  printf("connect success!\n");
  res=mysql_query(&conn,"insert into test values('user','123456')");
  if(res)
  {
   printf("error\n");
  }
  else
  {
  printf("OK\n");
  }
  mysql_close(&conn);
}
return ;
}

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

  5.编译程序

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

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

  

  6.运行代码

    ./test

  7.再次查看数据库

    mysql>use test;

    mysql>select * from test;

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

================我是分割线============================

 #include <stdio.h>
#include <mysql.h>
#define HOST "localhost"
#define USERNAME "root"
#define PASSWORD ""
#define DATABASE "test" void insert_sql(char * sql);
void query_sql(char* sql);
int main(int argc,char *argv[])
{
//insert_sql("insert into test values('user','123456')");
query_sql("select * from test");
return ;
} void insert_sql(char * sql)
{
MYSQL conn;
int res;
mysql_init(&conn);
if(mysql_real_connect(&conn,"localhost","root","","test",,NULL,CLIENT_FOUND_ROWS))
{
printf("connect success!\n");
res=mysql_query(&conn,sql);
if(res)
{
printf("error\n");
}
else
{
printf("OK\n");
}
mysql_close(&conn);
} } void query_sql(char* sql)
{
MYSQL my_connection; /*这是一个数据库连接*/
int res; /*执行sql語句后的返回标志*/
MYSQL_RES *res_ptr; /*指向查询结果的指针*/
MYSQL_FIELD *field; /*字段结构指针*/
MYSQL_ROW result_row; /*按行返回的查询信息*/ int row, column; /*查询返回的行数和列数*/
int i, j; /*只是控制循环的两个变量*/ /*初始化mysql连接my_connection*/
mysql_init(&my_connection); /*这里就是用了mysql.h里的一个函数,用我们之前定义的那些宏建立mysql连接,并
* 返回一个值,返回不为空证明连接是成功的*/
if (mysql_real_connect(&my_connection, HOST, USERNAME, PASSWORD, DATABASE, , NULL, CLIENT_FOUND_ROWS))
{
/*连接成功*/
printf("数据库查询query_sql连接成功!\n");
/*这句话是设置查询编码为utf8,这样支持中文*/
mysql_query(&my_connection, "set names utf8"); /*下面这句话就是用mysql_query函数来执行我们刚刚传入的sql語句,
* 这会返回一个int值,如果为0,证明語句执行成功*/
res = mysql_query(&my_connection, sql); if (res)
{ /*现在就代表执行失败了*/
printf("Error: mysql_query !\n");
/*不要忘了关闭连接*/
mysql_close(&my_connection);
}
else
{
/*现在就代表执行成功了*/
/*将查询的結果给res_ptr*/
res_ptr = mysql_store_result(&my_connection); /*如果结果不为空,就把结果print*/
if (res_ptr)
{
/*取得結果的行数和*/
column = mysql_num_fields(res_ptr);
row = mysql_num_rows(res_ptr) + ;
printf("查询到 %lu 行 \n", row); /*输出結果的字段名*/
for (i = ; field = mysql_fetch_field(res_ptr); i++)
printf("%s\t", field->name);
printf("\n"); /*按行输出結果*/
for (i = ; i < row; i++)
{
result_row = mysql_fetch_row(res_ptr);
for (j = ; j < column; j++)
printf("%s\t", result_row[j]);
printf("\n");
} } /*不要忘了关闭连接*/
mysql_close(&my_connection);
}
}
}

完整代码

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

===============2015年6月29日 更新========================

  上面的这段代码我在平时练习中经常使用到包括近一年来的那些连接mysql数据库的代码都是以这个为模版的。但是最近在实际项目中用到这个代码,一开始没有发现问题,但是在项目进行测试的时候发现出现内存泄漏的问题,经查询是上面代码存在两处内存泄漏问题。

  1.mysql结果集问题。由mysql_store_result()、mysql_use_result()、mysql_list_dbs()等为结果集分配的内存。完成对结果集的操作后,必须调用mysql_free_result()释放结果集使用的内存。

  2.本以为这样就应该没有问题了,但是进行模拟压力测试时,发现每次连接都会产生8~16K的内存(单纯的进行mysql连接),查了一下资料,是每次调用mysql连接后除了进行mysql_close之外,还要使用mysql_library_end进行释放。(http://www.cnblogs.com/cobbliu/p/3709051.html)

参考资料:

http://blog.csdn.net/fykhlp/article/details/5950485#

Linux下C++连MySQL数据库的更多相关文章

  1. Linux下自动备份MySQL数据库并上传到远程FTP服务器

    Linux下自动备份MySQL数据库并上传到远程FTP服务器且删除指定日期前的备份Shell脚本 说明:  1.备份MySQL数据库存放目录/var/lib/mysql下面的xshelldata数据库 ...

  2. Linux下定时备份MySQL数据库的Shell脚本

    Linux下定时备份MySQL数据库的Shell脚本   对任何一个已经上线的网站站点来说,数据备份都是必须的.无论版本更新还是服务器迁移,备份数据的重要性不言而喻.人工备份数据的方式不单耗费大量时间 ...

  3. Linux下C++访问MySQL数据库

    由于想要开始了解并学习用LAMP进行web开发,所以昨晚我在Fedora上安装了MySQL,学习了MySQL的几个常用命令.想着在学习进行web开发(PHP访问数据库)之前,先用我熟悉的C++连接数据 ...

  4. Linux下如何启用MySQL数据库远程访问

    远程连接MySQL出于安全考虑,一般都关闭了远程访问,但有时候需要提供远程访问数据库的服务,下面我们快速学习下: 第一步:修改my.cnf文件使用文本编辑器去编辑MySQL服务器的配置文件my.cnf ...

  5. Linux下C连接MySql数据库

    目录: 一.解决小的问题: 二.大问题,如果你不小心把/usr/lib的所属用户改了导致sudo命令用不了: 三.C连接MySql编程本身: 其实写这个程序真的很简单,十多分钟的事情,只是以前没在Li ...

  6. Linux下远程连接MySQL数据库

    估计搞了一个多小时才把这个远程连接搞好.一台本地电脑,一台云服务器,都是linux系统. 步骤 在服务器端开启远程访问 首先进入mysql数据库,然后输入下面两个命令: grant all privi ...

  7. linux 下C++查询mysql数据库

    上一节我们看了怎么使用mysql提供的API来连接mysql数据库,现在来看看怎么执行一条简单的查询语句,并且把查询的结果显示出来. 准备工作:首先新建了一个数据库inote,在这个数据库下面新建了一 ...

  8. Linux下如何从mysql数据库里导出导入数据

    https://blog.csdn.net/u012884402/article/details/47337701 一. 表的导入 1.进入数据库 mysql 数据库名 2.​查看表 show tab ...

  9. Linux下第一次使用MySQL数据库,设置密码

    在终端下输入:/etc/rc.d/init.d/mysqld status 查看MySQL状态,看看是否运行. 没有运行的话就输入:/etc/rc.d/init.d/mysqld start 这时,就 ...

随机推荐

  1. ZH奶酪:IBG项目工作内容

    IBG项目技术概览 (HTML/CSS/JavaScript/AngularJS/PHP/MySQL): (1)后台:PHP Yii2.0 Framework (2)前端:Ionic Framewor ...

  2. 【树莓派】制作树莓派所使用的img镜像(一)

    最近一直在折腾树莓派,前几天装了10台设备,最近又来了15台开发板子.基本每台设备都需要进行如下操作: 1.安装树莓派OS,并配置键盘.时区.语言编码格式等: 2.新增组.用户.配置静态IP地址: 3 ...

  3. Openerp 7 view画面编辑/创建/删除/复制功能控制

    OpenERP 7.0中,Tree或Form画面上可以添加属性create edit delete,用于控制Create.Delete.Edit.Duplicate功能是否显现.如下例:<for ...

  4. WebApi 数据保护操作未成功。这可能是由于未为当前线程的用户上下文加载用户配置文件导致的。当线程执行模拟时,可能会出现此情况。","ExceptionType":"System.Security.Cryptography.CryptographicException","StackTrace

    在调用System.Security.Cryptography.ProtectedData.Protect方法来保护私密信息时,IIS可能会报以下错误:CryptographicException: ...

  5. spring mysql多数据源配置

    spring mysql多数据源配置 @Configuration public class QuartzConfig { @Autowired private AutowireJobFactory ...

  6. Javascript获取当月的天数

    var d = new Date(); var curMonthDays = new Date(d.getFullYear(), (d.getMonth() + 1), 0).getDate(); a ...

  7. 按部就班——图解配置IIS5的SSL安全访问(转)

    作者:mikespook 版本:1.0 最后更新:2004-12-22 16:04 按部就班——图解配置IIS5的SSL安全访问... 1 写在前面的... 1 第一步:       准备工作... ...

  8. 6种.net分布式缓存解决方式

    6种.net分布式缓存解决方式 1.     使用内置ASP.NET Cache (System.Web.Caching) : https://msdn.microsoft.com/en-us/lib ...

  9. 转载:【微信小程序】 wx:if 与 hidden(隐藏元素)区别

    条件渲染 顾名思义所谓的条件渲染,就是通过条件来判断是否需要渲染该代码块.条件渲染主要是用到wx:if 和 block wx:if 这两个,第一个相信好理解,第二个是在block里面进行条件渲染,这里 ...

  10. setting.xml配置详解

    http://blog.csdn.net/uohzoaix/article/details/7035302 http://www.micmiu.com/software/build/maven-set ...