1.安装mysql-server,在Ubuntu 10.04下安装mysql-server-5.1,会自动安装mysql-client_5.1
sudo apt-get install mysql-server-5.1
2.C APIs包含在mysqlclient库文件中与MySQL的源代码一块发行,用于连接到数据库和执行数据库查询,因此需要安装libmysqlclient-dev
sudo apt-get install libmysqlclient-dev
假定已安装成功,相关文件如下:
头文件在/usr/include/mysql目录下;
库文件在/usr/lib/mysql和/usr/lib目录下
注意:mac,需要再安装mysql-connector-c,同时具体的库要链接到/usr/lib下:例如
sudo ln -s /usr/local/Cellar/mysql-connector-c/6.1.6/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
3. 编译:
gcc testdb.c -o test -I /usr/include/mysql -L /usr/lib -lmysqlclient
MYSQL *mysql_init(MYSQL *);
//这里称之为载入函数吧,返回的MYSQL指针要用到后续的函数中
int mysql_options(MYSQL *connection, enum option_to_set,const char *argument);
//设置MYSQL*的一些属性,比如超时时间等
MYSQL *mysql_real_connect(MYSQL *connection,
const char *server_host,
const char *sql_user_name,
const char *sql_password,
const char *db_name,
unsigned int port_number,//置0连接默认端口,一般为3306
const char *unix_socket_name,//NULL
unsigned int flags);//无另外属性时置0
//连接函数
void mysql_close(MYSQL *connection);
//关闭连接
unsigned int mysql_errno(MYSQL *connection);
//返回错误代码
char *mysql_error(MYSQL *connection);
//返回错误信息
int mysql_query(MYSQL *connection, const char *query);
//执行sql语句
my_ulonglong mysql_affected_rows(MYSQL *connection);
//返回执行语句过后受影响的行数,针对insert,update,delete
MYSQL_RES *mysql_store_result(MYSQL *connection);
//返回执行结果,适用于数据量较小时,会返回到客户端保存
my_ulonglong mysql_num_rows(MYSQL_RES *result);
//返回上面函数返回结果的行数
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);
//抽取一条记录,返回NULL时表示抽取完记录或者错误
void mysql_data_seek(MYSQL_RES *result, my_ulonglong offset);
//调整数据位置,offset为0时,下次调用mysql_fetch_row将返回result第一条记录
MYSQL_ROW_OFFSET mysql_row_tell(MYSQL_RES *result);
//返回当前的位置
MYSQL_ROW_OFFSET mysql_row_seek(MYSQL_RES *result, MYSQL_ROW_OFFSET offset);
//移动数据位置,并返回先前的位置,可以和上一个函数结合使用
void mysql_free_result(MYSQL_RES *result);
//释放result空间
MYSQL_RES *mysql_use_result(MYSQL *connection);
//返回执行结果,适用于数据量较大时,不返回到客户端保存
unsigned int mysql_field_count(MYSQL *connection);
//返回查询结果中的列数(column数)
MYSQL_FIELD *mysql_fetch_field(MYSQL_RES *result);
//获得查询结果中的列名等信息(表头信息)
#include
#include
#include
#include
int main(void) {
// mysql操作符
MYSQL *mysql;
// mysql结果集
MYSQL_RES *mysql_res;
// mysql行操作符
MYSQL_ROW mysql_row;
char sqlcmd[200];
int r, t;
// 初始化
mysql = mysql_init(NULL);
if (!mysql) {
return EXIT_FAILURE;
}
printf("%s\n", "init");
// 链接
mysql = mysql_real_connect(mysql, "127.0.0.1", "root", "root", "test", 0, NULL, 0);
if (!mysql) {
return EXIT_FAILURE;
}
printf("%s\n", "connect");
mysql_set_character_set(mysql, "utf8");
// 执行查询
sprintf(sqlcmd, "%s", "select id,name from user");
r = mysql_real_query(mysql, sqlcmd, strlen(sqlcmd));
if (r) {
// 结束
mysql_close(mysql);
return EXIT_FAILURE;
}
printf("%s\n", "begin to query");
mysql_res = mysql_store_result(mysql);
if (!mysql_res) {
// 结束
mysql_close(mysql);
return EXIT_FAILURE;
}
while((mysql_row = mysql_fetch_row(mysql_res))) {
for (t = 0; t < mysql_num_fields(mysql_res); t++) {
printf("%s,", mysql_row[t]);
}
printf("\n");
}
// 释放
mysql_free_result(mysql_res);
printf("%s\n", "query finish");
// 结束
mysql_close(mysql);
return EXIT_SUCCESS;
}