ubuntu 下c && mysql

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);
	}
	//init
	mysql_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 USERNAME
	t = 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() 会报错?哪一位可以解释一

下。








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值