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. android 实现qq聊天对话界面效果

    效果图: chatting_item_from.xml <?xml version="1.0" encoding="UTF-8"?><Line ...

  2. SQL左连接右连接

    假设有A,B两个表.     表A记录如下:   aID     aNum   1     a20050111   2     a20050112   3     a20050113   4      ...

  3. SPOJ 74. Divisor Summation 分解数字的因子

    本题有两个难点: 1 大量的数据输入.没处理好就超时 - 这里使用buffer解决 2 因子分解的算法 a)暴力法超时 b)使用sieve(筛子),只是当中的算法逻辑也挺不easy搞对的. 数值N因子 ...

  4. eclipse Java compiler level does not match the version of the installed Java project facet.

      eclipse Java compiler level does not match the version of the installed Java project facet. Create ...

  5. 新浪API及调用案例

    百度分享:http://pan.baidu.com/s/1uSmku

  6. 24、java操作xml方法

    XML解析方式 1. SAX解析方式 SAX(simple API for XML)是一种XML解析的替代方法.相比于DOM,SAX是一种速度更快,更有效的方法.它逐行扫描文档,一边扫描一边解析.而且 ...

  7. linuxGDB下动态链接库的调试

    (gdb) file <你的exe>(gdb) load <你的so>                #这条应该是可选的 (gdb) dir <so'dir>(gd ...

  8. pat1040:有几个PAT

    https://www.patest.cn/contests/pat-b-practise/1040 #include "stdio.h" int main() { int p = ...

  9. eclipse里面的时间错误,比电脑系统时间慢了8个小时

    eclipse里面的时间错误,比电脑系统时间慢了8个小时 解决办法: 打开<eclipse安装目录>/eclipse.ini文件 在文件末尾追加 -Duser.timezone=Asia/ ...

  10. JavaScript 设计模式之代理模式

    一.代理模式概念解读 1.代理模式概念文字解读 代理,顾名思义就是帮助别人做事,GOF对代理模式的定义如下: 代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问.代理模式使得代理对象 ...