c 连接mysql

apt-get install libmysqlclient-dev

mysql 使用的是xampp 需要指定sock

源码:main.c

#if defined(_WIN32) || defined(_WIN64)  //为了支持windows平台上的编译
#include <windows.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include <mysql/mysql.h>  //我的机器上该文件在/usr/local/include/mysql下//定义数据库操作的宏,也可以不定义留着后面直接写进代码
#define SELECT_QUERY "select username from test where userid = %d"int main(int argc, char **argv) //char **argv 相当于 char *argv[]
{MYSQL mysql,*sock;    //定义数据库连接的句柄,它被用于几乎所有的MySQL函数MYSQL_RES *res;       //查询结果集,结构类型MYSQL_FIELD *fd ;     //包含字段信息的结构MYSQL_ROW row ;       //存放一行查询结果的字符串数组char  qbuf[160];      //存放查询sql语句字符串if (argc != 2) {  //检查输入参数fprintf(stderr,"usage : mysql_select <userid>\n\n");exit(1);}mysql_init(&mysql);if (!(sock = mysql_real_connect(&mysql,"localhost","root","","test",3306, "/opt/lampp/var/mysql/mysql.sock" ,0))) {fprintf(stderr,"Couldn't connect to engine!\n%s\n\n",mysql_error(&mysql));perror("");exit(1);}sprintf(qbuf,SELECT_QUERY,atoi(argv[1]));if(mysql_query(sock,qbuf)) {fprintf(stderr,"Query failed (%s)\n",mysql_error(sock));exit(1);}if (!(res=mysql_store_result(sock))) {fprintf(stderr,"Couldn't get result from %s\n", mysql_error(sock));exit(1);}printf("number of fields returned: %d\n",mysql_num_fields(res));while (row = mysql_fetch_row(res)) {printf("Ther userid #%d 's username is: %s\n", atoi(argv[1]),(((row[0]==NULL)&&(!strlen(row[0]))) ? "NULL" : row[0])) ; puts( "query ok !\n" ) ; } mysql_free_result(res);mysql_close(sock);exit(0);return 0;   //. 为了兼容大部分的编译器加入此行
}

编译:

 gcc -o mysql_select ./main.c -lmysqlclient

 


 

简单类封装

 test.sql   

mysql>use test;

mysql>source ~/test.sql;
DROP TABLE IF EXISTS `test`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `test` (`id` int(11) NOT NULL AUTO_INCREMENT,`value` text,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;--
-- Dumping data for table `test`
--

LOCK TABLES `test` WRITE;
/*!40000 ALTER TABLE `test` DISABLE KEYS */;
INSERT INTO `test` VALUES (1,'hxl'),(2,'sqlite'),(3,'test'),(4,'for'),(5,'linux');
/*!40000 ALTER TABLE `test` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;-- Dump completed on 2012-07-02 23:52:14

 

main.cc

#include    <cstdlib>
#include    <fstream>
#include    <iomanip>   
#include    <iostream> 
extern "C"
{ 
#include        <mysql/mysql.h>
#include        <string.h>}
using namespace std;class MyDb
{private:MYSQL mysql,*sock;    //定义数据库连接的句柄,它被用于几乎所有的MySQL函数MYSQL_RES *res;       //查询结果集,结构类型MYSQL_FIELD *fd ;     //包含字段信息的结构MYSQL_ROW row ;       //存放一行查询结果的字符串数组public:MyDb(){cout<<"nothing"<<endl;}MyDb(char *ip, char *user, char *passwd, char *db_name, int port, char *socket){mysql_init(&mysql);if (!(sock = mysql_real_connect(&mysql, ip, user, passwd, db_name, port, socket ,0))) {fprintf(stderr,"Couldn't connect to engine!\n%s\n\n",mysql_error(&mysql));perror("");exit(1);}}~MyDb(){mysql_free_result(res);mysql_close(sock);  cout<<"connect destoryed"<<endl;}void  get(char *str){if(mysql_query(sock,str)) {fprintf(stderr,"Query failed (%s)\n",mysql_error(sock));exit(1);}if (!(res=mysql_store_result(sock))) {fprintf(stderr,"Couldn't get result from %s\n", mysql_error(sock));exit(1);}printf("number of fields returned: %d\n",mysql_num_fields(res));while (row = mysql_fetch_row(res)) {printf("Ther username is: %s\n",(((row[0]==NULL)&&(!strlen(row[0]))) ? "NULL" : row[0])) ; puts( "query ok !" ) ; } }
};int
main ( int argc, char *argv[] )
{MyDb test("localhost","root","","test", 3306,"/opt/lampp/var/mysql/mysql.sock");test.get("select value from test where id = 1");return EXIT_SUCCESS;
}        // ----------  end of function main  ---------- 

 

 

编译:

g++ -g -o mysql_select ./mysql.cc -lmysqlclient

 

转载于:https://www.cnblogs.com/wangkangluo1/archive/2012/07/01/2571800.html

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

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

相关文章

Java 编程下 Eclipse 如何设置单行代码显示的最大宽度

Eclipse 下一行代码的默认宽度是 80 &#xff0c; 稍长一点的一行代码就会自动换行&#xff0c;代码可读性较差&#xff0c;我们可以自己在 Eclipse 对代码宽度进行设置。 设置路径为&#xff1a;【Window】→【Preferences】→【Java】→【Code Style】→【Formatter】&#x…

前端公共reset.css模板

简介学习地址&#xff1a; https://meyerweb.com/eric/tools/css/reset/重置样式表的目的是减少浏览器在默认行高&#xff0c;标题的边距和字体大小等方面的不一致。重置样式特意是非常通用的/* http://meyerweb.com/eric/tools/css/reset/ v2.0 | 20110126License: none (publ…

基于VMWare配置VxWorks开发环境

常规VxWorks的开发环境都是基于目标开发板或目标机来构建的&#xff0c;但并非所有人都具备这样的条件&#xff0c;所以本文主要介绍如何基于vmware来构建VxWorks开发环境。Step 1. 安装vmware 首先需要安装vmware, 版本没有什么限制&#xff0c;我装的是vmware 8.0&#xff0c…

plan

工作&#xff1a; plan A 确定用什么环境和工具进行开发&#xff0c;并让老杨了解。 如何支持骨骼动画模型&#xff0c;这是最关键部分。 交互和用户体验方面进行完善。 plan B 太极拳网站 前台&#xff1a;silverlight4.0 后台&#xff1a;java 数据库&#xff1a;mysql 生活…

keepalived实现高可用nginx反向代理的简单案例

写在前面&#xff1a;如果此文有幸被某位朋友看见并发现有错的地方&#xff0c;希望批评指正。如有不明白的地方&#xff0c;愿可一起探讨。案例拓扑图安装keepalived和nginx安装keepalived# yum -y install keepalived创建nginx用户组及nginx用户# groupadd -r nginx # userad…

Vue 父子组件双向绑定传值

最简单的双向绑定&#xff08;单文件中&#xff09;就是表单元素的v-model了&#xff0c;如果同时设置v-model和value&#xff0c;value属性无效。 自定义v-model&#xff1a;&#xff08;不推荐&#xff09; child: <template><h1>{{ msg }}</h1> </te…

java逻辑运算符

// | 或 & 与 int x3; System.out.println(x>2&x<5); // ||短路或 &&短路与 区别短路逻辑表达式判断第一个表达式&#xff0c;如果出结果直接返回true/false &#xff0c;而非短路直到逻辑运算式全部运行完毕才返回&#xff1b; System.out.println…

json--js

json对象与js对象的转换&#xff1a; json2.js var jsObj{a:"1",b:"2" }var jsonObjJSON.stringify(jsObj); var aJSON.parse(jsonObj).a; alert(a);1. JSON.stringify 将js对象转为json 2. JSON.parse 将json对象转为js转载于:https://www.cnblogs.…

给easyui datagrid 添加mouseover和mouseout事件

http://www.loststop.com/archive/soft-and-internet/3819.html http://www.loststop.com/easyui/demo/datagrid6.html

关于自定义控件,可以编译通过,但是用时提示无法创建新实例。

上网查询发现 这种错误通常是控件中使用的配置信息存在于配置文件里&#xff0c;而在程序没有运行时&#xff0c;获取不到配置信息造成的。 例如&#xff1a; 错误用法&#xff1a; string strUri Application.Current.Resources["WcfServiceUrl"].ToString();//引发…

leetcode 3Sum C++

荒废好久没更新了&#xff0c;时间过得很快&#xff0c;转眼就2017年了&#xff0c;经历了苦闷的科研阶段&#xff0c;发了论文顺利毕业&#xff1b;也经过三地辗转奔波来去的找工作&#xff0c;最终还是犹犹豫豫选择了自己知道以后可能会后悔的&#xff0c;果然就后悔了。所以…

JavaScript 函数循环、延时、节流、防抖

函数循环(setInterval) 间隔指定的毫秒数不停地执行指定的代码 <button onclick"myStartFunction()">开始</button> <button onclick"myStopFunction()">停止</button><script> var myVar null; //全局function myTimer…

bash知识点:文件测试

bash知识点&#xff1a;文件测试&#xff08;测试文件是否存在&#xff0c;文件是某种类型&#xff09;单目测试-e file:测试文件是是否存在-a file&#xff1a;测试文件是是否存在-f file&#xff1a;测试是否为普通文件,是为真&#xff0c;否则为假-d file&#xff1a;测试是…

MVC 4 教程

MVC4 前件&#xff1a;visual studio 10 sp1 http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/intro-to-aspnet-mvc-4 &#xff08;by Rick Anderson&#xff09; Music Store (by Jon Galloway) http://www.asp.net/mvc/tutorials/mvc-music-sto…

Linux下java/bin目录下的命令集合

Linux下JAVA命令&#xff08;1.7.0_79&#xff09; 命令 详解 参数列表 示例 重要程度 资料 appletviewer Java applet 浏览器。appletviewer 命令可在脱离万维网浏览器环境的情况下运行 applet。 Usage: appletviewer <options> url(s) where <options> …

火车采集小结

采集一个页面全部内容的正则&#xff1a;^(?<content>[\s\S]*?)$转载于:https://www.cnblogs.com/afish/p/3984680.html

vscode 开发常用

设置缩进空格&#xff1a;2个| 4个 文件–》首选项–》设置 代码缩进对齐 &#xff1a; Ctrl [ 和 Ctrl ] 实现文本的向左移动或者向右移动&#xff1b; Shift Alt F 实现代码的对齐

新手应该如何Javascript,JDom,JQuery,DWZ。。

作为web前端程序员来说想必这些东西大家都很熟悉了...但是作为初学者来说,如何学习 是一个很重要的问题,其实这些东西并不难,只是我们在学习的时候没有理清楚他们之间的概念导致我们盲目的学习, 以我自己为例子&#xff0c;希望能帮助到大家的学习。 在这之前我假设大家理解了…

gulp+PC前端静态页面项目开发

前言&#xff1a; 现在单页面很流行&#xff0c;但是在 PC 端多页面还是常态&#xff0c;所以构建静态页面的工具还有用武之地 gulp构建前言&#xff1a; 如今我们开发web网页的方式主要有几种&#xff0c;使用vue-cli、create-react-app、webpack、不借助构建工具等实现单页…

Struts2中jsp前台传值到action后台的三种方式以及valueStack的使用

struts2中的Action接收表单传递过来的参数有3种方法&#xff1a; 如&#xff0c;登陆表单login.jsp&#xff1a; 1 <form action"login" method"post"name"form1"> 2 3 4   用户名&#xff1a;<s:textfieldname"username&quo…