Linux下C语言连接MySQL
来源:互联网 发布:医院和农合的网络系统 编辑:程序博客网 时间:2024/05/22 03:20
Linux 发行版本:RHEL 6.1
Linux 内核版本: 2.6.32-131.0.15.el6.i686
gcc 版本: 4.4.4 20100726
MySQL版本:mysql-5.1.52-1.el6_0.1.i686,mysql-devel-5.1.52-1.el6_0.1.i686,mysql-server-5.1.52-1.el6_0.1.i686
全部是RHEL 6.1自带的rpm包,由于红帽的升级服务需要额外费用,所以一般人都将镜像当成更新源。另一方面,红帽发行的企业版是很稳定的,当然稳定的前提是使用配套的rpm包。
1.建立MySQL服务器
#yum install mysql #yum install mysql-devel #yum install mysql-server2.创建数据库
#/etc/init.d/mysqld start//启动MySQL服务器 #mysqladmin –u root password YOUR.PASSWORD//添加MySQL的root账号 #mysql –u root –p//以root身份登录数据库 mysql>create database iSql;//创建一个数据库,名叫“iSql” mysql>grant all privileges on iSql.* to jiutian@localhost identified by 'PASSWORD'; //为iSql创建一个数据库账户,名叫“jiutian”,最后的密码要用单引号括起来 mysql>use iSql;//切换到iSql数据库 Database changed mysql>CREATE TABLE votelanguage( ->id INT NOT NULL AUTO_INCREMENT, ->choice TINYINT NOT NULL, ->ts TIMESTAMP, ->PRIMARY KEY(id);//创建新表votelanguage(摘自MySQL 5 权威指南 第三版) Query OK, 0 rows affected(0.75 sec)//创建成功 mysql>describe votelanguage//显示votelanguage表的结构
3.客户端编写程序
C 程序源代码如下:
#include <stdio.h>#include <mysql.h>int main(int argc, char *argv[]){ int i; MYSQL *conn; //connection MYSQL_RES *result; //result of SELECT query MYSQL_ROW row; //a record of the SELECT query //create connection to MySQL conn = mysql_init(NULL); if (mysql_real_connect(conn, "localhost", "jiutian", "DATABASE.PASSWD", "iSql", 0, NULL, 0) == NULL){ fprintf(stderr, "Sorry, no database connection ...\n"); return 1; } //only if Unicode output(utf8) is desired mysql_query(conn, "SET NAMES 'utf8'"); //create list of all const char *sql = "SELECT ts as 'time'\ FROM votelanguage\ WHERE choice = 1;"; if (mysql_query(conn, sql)){ fprintf(stderr, "%s\n\n", mysql_error(conn)); fprintf(stderr, "%s\n", sql); return 1; } //process result result = mysql_store_result(conn); if (result == NULL){ if (mysql_error(conn)) fprintf(stderr, "%s\n", mysql_error(conn)); else fprintf(stderr, "%s\n", "unknown error\n"); return 1; } printf("%i records found \n", (int)mysql_num_rows(result)); //loop over all records while ((row = mysql_fetch_row(result)) != NULL){ for (i = 0; i < mysql_num_fields(result); i++){ if (row[i] == NULL) printf ("[NULL]\t"); else printf ("%s\n", row[i]); } } //release memory, server connection mysql_free_result(result); mysql_close(conn); return 0;}
4.gcc编译
gcc -o link -I/usr/include/mysql -L/usr/lib/mysql -lmysqlclient//由于mysql的lib文件不在默认的库文件目录下,所以编译的时候要把-L加进去,include文件也是同理//不然的话,就会提示各种找不到的抓狂错误..//比如 /usr/bin/ld: cannot find -lmysqlclient 其实就是找不到mysql的某个库文件
至于如果不加参数编译不通过的造成的原因,个人认为是mysql的rpm包默认配置路径的问题,在/usr/lib/mysql下有几个连接文件和连接的源文件在同一个目录下。所以如果不想每次编译的时候都将路径输入,就在gcc默认的lib位置加个连接就好了。
5.makefile文件
CC = gccINCLUDES = -I/usr/include/mysql#link libmysqlclient functions dynamicallyLIBS = -L/usr/lib/mysql -lmysqlclientall:linklink_MySql.o: link_MySql.c$(CC) -c $(INCLUDES) link_MySql.clink: link_MySql.o$(CC) -o link $(LIBS) link_MySql.oclean:rm -f link *.omakefile文件中的每条命令前面用tab作为开始标记,不然是会报错的..
6.关于客户端Linux无法连接服务器MySQL的原因
由于装的是RHEL6.1,所以很犀利的防火墙..只能在setup里添加MySQL的端口3306,protocol是tcp(会提示小写的)~
PS:本文很多是手工输入,如果错误请提示,谢谢~
- LINUX下C语言连接mysql
- linux下c语言连接mysql数据库
- Linux下C语言连接MySQL
- Linux下C语言连接MySQL
- linux下C语言连接mysql
- LINUX下C语言连接mysql
- Linux下C语言连接MySQL
- Linux下C语言连接MySQL
- linux 下连接mysql c语言
- LINUX下C语言连接mysql
- Linux 下 C语言连接MYSQL数据库
- Linux下C语言连接MySQL
- Linux下C语言连接MySQL
- Linux下C语言连接MySQL
- Linux下C语言连接MySQL
- Linux下C语言连接MySQL找不到mysql.h解决办法
- Linux下C语言连接MySQL找不到mysql.h解决办法
- Linux下C语言连接MySQL找不到mysql.h解决办法
- Delphi当中的注释
- 一步一步写固件升级系统
- 研磨Struts2 第一章 Struts2概述-2
- Delphi XE2读取游戏内存偏移数据代码
- Linux 前台 和 后台进程 说明
- Linux下C语言连接MySQL
- 看solr源代码的笔记,主要是代码简单解析
- Android:ImageView如何显示网络图片
- strcpy函数用法
- 久违的csdn
- bioinformatics perl useful
- 大家帮忙看看我这道题
- Delphi 语言字符集
- 资治通鉴,卷五十一,螽斯