Mayuyu学过MySQL数据库,我们都知道MySQL数据库是一种关系型数据库,库中有表,表中有记录,记录中有字段。
现在Mayuyu将来带领大家学习如何用C语言连接数据库,并领略常见操作的细节问题。
首先,我们先建库,然后建表,再插入记录。
(1)建库
这个其实很简单啦,直接使用命令 :create database test; 这样就建立了一个名称为test的数据库。
(2)建表
我们先进入test数据库,创建一个表,即如下语句。
create table user(
id int(6),
name varchar(15),
tel int(11)
);
这里Mayuyu只建立一个简单的表,测试用。
(3)表建立完成后,我们开始插入记录
insert into user (id,name,tel) values (1,"Mayuyu",88888888);
insert into user (id,name,tel) values (2,"Mayuyu",88888888);
insert into user (id,name,tel) values (3,"Mayuyu",88888888);
insert into user (id,name,tel) values (4,"Mayuyu",88888888);
insert into user (id,name,tel) values (5,"Mayuyu",88888888);
insert into user (id,name,tel) values (6,"Mayuyu",88888888);
嗯,成功插入上面6条记录。
现在,我们可以编写C程序来进行数据库操作。代码如下:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <mysql.h>
char *host = "localhost";
char *user = "root";
char *password = "root";
char *db_name = "test";
int main()
{
MYSQL *conn = NULL;
MYSQL_RES *res = NULL;
MYSQL_ROW row = NULL;
conn = mysql_init(NULL);
if(mysql_real_connect(conn,host,user,password,db_name,0,NULL,0) == NULL)
{
fprintf(stderr,"%s\n",mysql_error(conn));
exit(1);
}
char sql[] = "select * from user where name='Mayuyu';";
if(mysql_query(conn,sql))
{
fprintf(stderr,"%s\n",mysql_error(conn));
exit(1);
}
res = mysql_use_result(conn);
while((row = mysql_fetch_row(res)) != NULL)
printf("%s\t%s\t%s\n",row[0],row[1],row[2]);
mysql_free_result(res);
mysql_close(conn);
return 0;
}
嗯,上面的代码中体现了C语言操作数据库的常见操作。注意在编译时候要加上一定参数。如下:
gcc -I /usr/include/mysql/ -L /usr/lib/mysql/ -l mysqlclient MySQL.c -o MySQL
执行结果如下:
现在Mayuyu来分析上面代码:
在连接数据库的时候,我们要知道数据库的地址,用户名,密码,数据库名称。从主函数开始:
(1)MYSQL *conn = NULL
本语句是获得一个数据库连接。
(2)MYSQL_RES *res= NULL;
指向结果集。
(3)MYSQL_ROW row = NULL;
其实MYSQL_ROW是一个二维指针。
(4)mysql_init()
函数原型:MYSQL *mysql_init(MYSQL *mysql);初始化mysql句柄。如果mysql为NULL,则分配一个。
(5)mysql_real_connect()
函数原型:MYSQL *mysql_real_connect(
MYSQL *mysql,
const char *host,
const char *user,
const char *passwd,
const char *db,
unsigned int port,
const char *unix_socket,
unsigned long client_flag
)
上面描述了五个参数的主要取值,MYSQL *为mysql_init函数返回的指针,host为null或localhost时
链接的是本地的计算机,unix_socket为null时,表明不使用socket或管道机制,最后一个参数经常设置
为0。
当连接成功时,返回MYSQL连接句柄,失败,返回NULL。当成功时,返回值与第一个参数值是相同的。
(6)mysql_query()
执行sql语句。
(7)mysql_fetch_row()
mysql_fetch_row()从和指定的结果标识关联的结果集中取得一行数据并作为数组返回。每个结果的列储
存在一个数组的单元中,偏移量从0开始。依次调用 mysql_fetch_row() 将返回结果集中的下一行,如
果没有更多行则返回FALSE。