学习C语言对数据库的基本操作。
执行代码前事先已经在本地建立了一个名为testC的数据库,并且库中建立了一个表,表中有3个字段。分别是:id(int),user(varchar),tel(varchar)
下面是操作数据库的代码,在创建操作数据库的sql语句时会用到Linux下的C函数snprintf():
MYSQL conn;
MYSQL_RES *res_ptr;
MYSQL_ROW sqlrow;
void connection(const char *host, const char *user, const char *password, const char *database)
{
mysql_init(&conn); //注意取地址符号
if(mysql_real_connect(&conn, host, user, password, database, 0, NULL, 0))
{
printf("connection success!\n");
}
else
{
fprintf(stderr, "connection failed\n");
if(mysql_error(&conn))
{
fprintf(stderr, "connection error %d: %s\n", mysql_error(&conn), mysql_error(&conn));
}
exit(EXIT_FAILURE);
}
}
void insert()
{
int id;
char cid[20];
char user[20];
char tel[20];
char sql_insert[100];
printf("请输入id,user,tel 进行数据插入:\n");
scanf("%d%s%s", &id, user, tel);
snprintf(sql_insert, sizeof(sql_insert), "INSERT INTO info(id, user, tel) VALUES (%d, \"%s\", \"%s\")", id, user, tel);
//int res = mysql_query(&conn, "INSERT INTO info(id, user, tel) VALUES (id, user, tel)");
mysql_query(&conn, sql_insert);
}
void update()
{
int id;
char chtel[30];
char sql_update[100];
printf("请输入id值和要修改的tel的内容:\n");
scanf("%d%s", &id, chtel);
snprintf(sql_update, sizeof(sql_update), "UPDATE info SET tel = \"%s\" WHERE id = %d", chtel, id);
mysql_query(&conn, sql_update);
}
void delete()
{
int id;
printf("请输入要删除数据的id:\n");
scanf("%d", &id);
char sql_delete[100];
snprintf(sql_delete, sizeof(sql_delete), "DELETE from info WHERE id = %d", id);
mysql_query(&conn, sql_delete);
}
/*
C语言提取数据一般需要4个步骤:
1.执行查询
2.提取数据
3.处理数据
4.必要的清理工作
使用mysql_query来发送SQL语句,然后使用mysql_store_result或mysql_use_result来提取数据,具体使用哪个语句取决于想做的操作。
接着,将使用一系列mysql_fetch_row来处理数据。
最后,使用mysql_free_result释放查询占用的内存。
*/
void querydata()
{
int res = mysql_query(&conn, "select * from info");
int i, j;
if(res)
{
fprintf(stderr, "select error %d : %s\n", mysql_error(&conn), mysql_error(&conn));
}
else
{
res_ptr = mysql_store_result(&conn);
if(res_ptr)
{
printf("Retrieved %lu rows \n", (unsigned long)mysql_num_rows(res_ptr));
j = mysql_num_fields(res_ptr);
while((sqlrow = mysql_fetch_row(res_ptr))) //依次取出记录
{
for(i=0; i<j; i++)
{
printf("%s\t", sqlrow[i]);
}
printf("\n");
}
if(mysql_error(&conn))
{
//fprintf(stderr, "Retrive error : %s\n", mysql_error(&conn));
}
mysql_free_result(res_ptr);
}
}
}
void showChoice()
{
printf("***********************************\n");
printf("***** 1 查询数据 *******\n");
printf("***** 2 插入数据 *******\n");
printf("***** 3 更新数据 *******\n");
printf("***** 4 删除数据 *******\n");
printf("***** 0 退出程序 *******\n");
printf("***********************************\n");
}
int main()
{
int choice;
connection("localhost", "username of sql", "password of sql", "testC");
while(1)
{
showChoice();
scanf("%d", &choice);
switch(choice)
{
case 1: querydata();
break;
case 2: insert();
break;
case 3: update();
break;
case 4: delete();
break;
case 0: exit(1);
default: printf("输入错误\n");
break;
}
}
mysql_close(&conn);
exit(EXIT_SUCCESS);
return 0;
}