ubuntu 下c && mysql

来源:互联网 发布:美国白人比例知乎 编辑:程序博客网 时间:2024/06/04 17:59

mysql 作为数据库,提供了c/c++,java,python,perl等的API。本文简单的介绍一下在c 程序中如何使用mysql。


一般步骤:

应用程序对数据库的操作一般步骤是:

1、建立连接

      初始化连接句柄结构 实际创建连接

2、执行SQL操作语句

3、关闭连接

对应的实现过程:

调用mysql_library_init(),初始化MySQL 库

调用mysql_init()初始化连接处理程序,调用mysql_real_connect() 连接到服务器。

发出SQL语句并处理其结果

调用mysql_close(), 关闭与MySQL服务器的连接

通过调用mysql_library_end(), 结束MySQL库的使用。


常用结构:

MYSQL 结构代表一个数据库连接的句柄,包含关于服务器的连接状态的信息。

MYSQL_RES代表返回行的查询结果

MYSQL_ROW 表示一个行数据的类型安全

MYSQL_FIELD 包含字段信息


example:

#include <mysql/mysql.h>#include <stdio.h>#include <stdlib.h>int main(){MYSQL *mysql;MYSQL_RES *res;MYSQL_ROW row;const char *query = "select * from data_import";int t, r;//mysql = new MYSQL;mysql = (MYSQL*)malloc(sizeof(MYSQL));if (!mysql) {fprintf(stderr, "malloc failed\n");exit(EXIT_FAILURE);}//initmysql_init(mysql);if (!mysql_real_connect(mysql, "localhost", "root", "lijun", "emp",0, NULL, 0)) {printf("Error connecting to database: %s\n", mysql_error(mysql));} else {printf("Connected ...\n");}//SELECT * FROM USERNAMEt = mysql_query(mysql, query);if (t) {printf("Error making query: %s\n", mysql_error(mysql));} else {printf("Query made...\n");res = mysql_use_result(mysql);if (res) {for (r = 0; r < mysql_field_count(mysql); r++) {row = mysql_fetch_row(res);if (row < 0) {break;}for (t = 0; t < mysql_num_fields(res); t++) {printf("%s ", row[t]);}printf("\n");}}mysql_free_result(res);}mysql_close(mysql);//delete mysql;free(mysql);}


mysql_use_result() 用来对“按行“结果集进行初始化处理,该函数只可以初始化检索结果但无法获得任何实际行。

mysql_num_fields() 用来得到列数,获取行数的是mysql_num_rows() 这个函数。


编译该文件的时候需要注意链接到mysqlclient库:

gcc  -lmysqlclient  filename.c  -o filename


如果报出链接错误,没有找到mysqlclient 库,检查一下是否安装了,没有的话可以:

sudo apt-get install libMySQLclient15-dev


这里,我有一点没弄明白,为什么不给MYSQL 动态分配内存空间,而直接调用mysql_init() 会报错?哪一位可以解释一

下。








原创粉丝点击