Mysql中CAPI的学生信息管理(二)

2015-01-22 20:54:39 · 作者: · 浏览: 6
的信息(字段数目,它们的名称和类型等)。通过重复调用mysql_fetch_field(),可以按顺序访问行内的字段信息,或者,通过调用mysql_fetch_field_direct(),能够在行内按字段编号访问字段信息。通过调用mysql_field_seek(),可以改变当前字段的光标位置。对字段光标的设置将影响后续的mysql_fetch_field()调用。此外,你也能通过调用mysql_fetch_fields(),一次性地获得关于字段的所有信息。
为了检测和通报错误,MySQL提供了使用mysql_errno()和mysql_error()函数访问错误信息的机制。它们能返回关于最近调用的函数的错误代码或错误消息,最近调用的函数可能成功也可能失败,这样,你就能判断错误是在何时出现的,以及错误是什么。
Mysql中CAPI的学生信息管理系统

首先我是在fedora-8中进行的实验

我把mysql需要的库安装在/usr/lib下,头文件安装在/usr/include/mysql/mysql.h下

利用 mysql中的C API对学生信息进行单个表格的管理。

部分源代码:

void Show(char Table_Name[]) //输出表格内容
{
	char str[25];
	
	sprintf(str, "select * from %s", Table_Name);
	mysql_real_query(mysql, str, (unsigned int)strlen(str));
	results = mysql_store_result(mysql);
	printf("\n");
	while((field = mysql_fetch_field(results)))
	{
		printf("%s\t\t", field->name);
	}printf("\n");
	while((record = mysql_fetch_row(results)))
	{
		num_fields = mysql_num_fields(results);
		for(i = 0; i < num_fields; i++)
		{
			printf("%s\t\t", record[i]);
		}printf("\n");
	}
	
	mysql_free_result(results);
}

?

void Insert(char Table_Name[])  //添加信息
{
	char str1[4][10];
	char str[30];
	
	printf("请输入名字: ");
	scanf("%s", str1[0]);
	printf("请输入学号: ");
	scanf("%s", str1[1]);
	printf("请输入数学成绩: ");
	scanf("%s", str1[2]);
	printf("请输入语文成绩: ");
	scanf("%s", str1[3]);
	
	sprintf(str, "Insert into %s values(\"%s\", \"%s\", \"%s\", \"%s\")", Table_Name,str1[0],str1[1],str1[2],str1[3]);
	printf("\n>>>%s\n", str);
	mysql_real_query(mysql, str, (unsigned int)strlen(str));
	printf(">>>添加成功!!!\n\n");
}

?

void Delete(char Table_Name[])  //删除信息
{
	char Delete_Name[10];
	char Delete_Str[40];
	
	printf("请输入要删除的信息的名字: ");
	scanf("%s", Delete_Name);
	sprintf(Delete_Str, "Delete from %s where name=\"%s\"", Table_Name, Delete_Name);
	printf("\n>>>%s\n", Delete_Str);
	mysql_real_query(mysql, Delete_Str, (unsigned int)strlen(Delete_Str));
	printf(">>>删除成功!!!\n\n");
}
void Find(char Table_Name[]) //修改信息
{
	char Find_Str[40];
	char Find_Name[10];
	
	printf("请选择要查询的名字: ");
	scanf("%s", Find_Name);

	sprintf(Find_Str,"select * from %s where name=\"%s\"", Table_Name, Find_Name);
	printf("\n>>>%s\n", Find_Str);
	/*执行指定为“以Null终结的字符串”的SQL查询*/
	mysql_real_query(mysql, Find_Str, (unsigned int)strlen(Find_Str));
	
	results = mysql_store_result(mysql);	//能够访问以前从服务器获得的行
	printf(">>>共有%d条信息\n\n", *results);
	while((field = mysql_fetch_field(results)))
	{
		printf("%s\t\t", field->name);
	}printf("\n");
	while((record = mysql_fetch_row(results)))   //能够访问以前从服务器获得的行
	{
		num_fields = mysql_num_fields(results);
		for(i = 0; i < num_fields; i++)
		{
			printf("%s\t\t", record[i]);
		}
		printf("\n");
	}
	printf("\n");
}