尝试照猫画虎的试验写了一下c连接数据库的操作,经过调试,最后略有感觉,在这里记录一下。
首先需要粘两段代码,第一段代码是源码,第二段代码是编译的时候需要用的Makefile文件内容。
第一段:
/******************************************
* 程序名:DatabaseTest.cc
* 功能 :用c链接数据库小实验
* 时间 :2015/10/16
* 作者 :Bob
******************************************/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <mysql/mysql.h>
//以下定义了链接数据库时候的一些必要的参数
static char host_name[100] = "127.0.0.1";
static char user_name[100] = "root"; //mysql帐号
static char password[100] = "wmn123"; //mysql密码
static char db_name[100] = "dbtest"; //需要打开的数据库名
static int port_number = 3306;
//在这里随意写了个查询的函数,以后会进行数据的增加删除更新等操作的实验
static char query[100] = "select * from student";
//注意:这里的三个变量很重要
static MYSQL_RES *res; //此处的res是接收数据库操作结果集的
static MYSQL_ROW row; //此处的row是对结果集中的字段进行操作的
static MYSQL *conn; //此处的conn是进行数据库初始化时候用的
/*************************************
* 函数名:int conn_mysql()
* 功能 :这个函数只是对数据库进行初始化
和连接用的。
*
*************************************/
int conn_mysql(){
conn = mysql_init(NULL); //初始化数据库连接,注意函数mysql_init()
//这里才是进行数据库链接的真正操作,注意函数mysql_real_connect(),这个函数有8个参数
if(!mysql_real_connect(conn, host_name, user_name, password, db_name, port_number, 0, 0)){
printf("connect error!\n");
exit (0);
}
return 0;
}
/*************************************
* 函数名:void get_inf()
* 功能 :这个函数是从数据库中进行操作的
函数。
*
*************************************/
void get_inf(){
FILE *fp;
//这里打开了一个文件,准备将操作结果保存到文件中
fp = fopen("/home/wmn/studentinfo.txt", "w");
if(fp == NULL){
printf("open error!\n");
}
//这里进行数据库操作,注意函数mysql_real_query(),有三个参数
mysql_real_query(conn, query, strlen(query));
//这里将操作结果保存到res中
res = mysql_store_result(conn);
//while循环取出结果集res中的值,然后赋值给row,注意这里的换数mysql_fetch_row()
while((row = mysql_fetch_row(res)) != NULL){
//输出到文件中
fprintf(fp, "%s %s\n", row[0], row[1]);
}
fclose(fp);
}
int main(int argc, char **argv){
conn_mysql();
get_inf();
return 0;
}
all: DatabaseTest.o
g++ -Wall -c -I/usr/local/mysql/include/mysql -I/usr/include/mysql DatabaseTest.c
g++ -Wall -o DatabaseTest DatabaseTest.o -L/usr/local/mysql/lib/mysql -L/usr/lib/mysql -lmysqlclient
关于第一段源码中的代码,基本已经注释的差不多了,其中写了好几个注意函数什么什么的,那几个函数已经整理笔记,
只是没有写到博客里面,明天有空会将那几个函数的详解搬到博客。
关于第二段Makefile文件中的编译内容,其实我也不懂,只是照的别人的进行修改,关于Makefile文件的内容编写,会在
以后学习了之后再总结一下。
这个操作是从项目OJ中学习到的,但是我分类到linux下,因为我想这么做,哈哈。