使用 MySQL C API 访问 MySQL — 示例
代码:
/* Simple C program that connects to MySQL Database server */ #include <mysql.h> #include <stdio.h>
main() { char *begin="\n+--------------BEGIN---------------+\n\n"; printf(begin);
MYSQL *conn; MYSQL_RES *res; MYSQL_ROW row; char *server = "localhost"; char *user = "your mysql user"; char *password = "your password"; char *database = "your database";
conn = mysql_init(NULL); /* Connect to database */
/* * CLIENT_MULTI_RESULTS * 通知服务器,客户端能够处理来自多语句执行或存储程序的多个结果集。 * 如果设置了CLIENT_MULTI_STATEMENTS,将自动设置它。 */ if (!mysql_real_connect(conn, server, user, password, database, 0, NULL, CLIENT_MULTI_RESULTS)) { fprintf(stderr, "%s\n", mysql_error(conn)); exit(1); }
char *tell="SQL Table Query...\n"; printf(tell); // SQL 普通表查询 char *sql="select password from Users whereUserName='client1@192.168.1.122'"; if (mysql_query(conn, sql)) { fprintf(stderr, "%s\n", mysql_error(conn)); exit(1); } res = mysql_use_result(conn); printf("SqlCommand:%s",sql); printf("\n"); while ((row = mysql_fetch_row(res)) != NULL) { printf("PassWord:%s \n\n", row[0]); } mysql_free_result(res);
char *tell2="SQL Store Query More...\n"; printf(tell2); // SQL 存储过程查询 char *sql1="call P_GetCurrentCostPriceByUserName('client1@192.168.1.122')"; if (mysql_query(conn, sql1)) { fprintf(stderr, "%s\n\n", mysql_error(conn)); exit(1); }
/* * 存储过程默认返回的是多个结果集, * 所以要用mysql_next_result取出并检查 * 下一个的结果集。否则在存储过程下的 * 其它查询语句都会出现 “Commands out of sync; * you can't run this command now”错误! */ do { if ((res = mysql_use_result(conn))) { printf("SqlCommand:%s",sql1); printf("\n"); while ((row = mysql_fetch_row(res)) != NULL) { printf("UserName:%s \n", row[0]); printf("Balance:%s \n",row[1]); printf("Price:%s \n\n",row[2]); } } }while (!mysql_next_result(conn)); mysql_free_result(res);
char *tell3="SQL View Query More...\n"; printf(tell3); // SQL 视图查询 char *sql2="select CameraID,URL,RtspName,PW,PTZ,PTZServer from V_UserEquipment whereLoginName='client1@192.168.1.122'"; if (mysql_query(conn, sql2)) { fprintf(stderr, "%s\n", mysql_error(conn)); exit(1); } res = mysql_use_result(conn); printf("SqlCommand:%s",sql2); printf("\n"); while ((row = mysql_fetch_row(res)) != NULL) { printf("CameraID:%s \n", row[0]); printf("URL:%s\n",row[1]); printf("RtspName:%s \n",row[2]); printf("PW:%s \n", row[3]); printf("PTZ:%s \n",row[4]); printf("PTZServer:%s \n\n",row[5]); } mysql_free_result(res);
mysql_close(conn);
char *end="+--------------END----------------+\n"; printf(end); }
编译:
gcc -o sqla $(mysql_config --cflags) sqla.c $(mysql_config --libs)
运行结果:
+--------------BEGIN---------------+ SQL Table Query... SqlCommand:select password from Users where UserName='client1@192.168.1.122' PassWord:client1 SQL Store Query More... SqlCommand:call P_GetCurrentCostPriceByUserName('client1@192.168.1.122') UserName:client1@192.168.1.122 Balance:30000 Price:0.05 SQL View Query More... SqlCommand:select CameraID,URL,RtspName,PW,PTZ,PTZServer from V_UserEquipment where LoginName='client1@192.168.1.122' CameraID:051010049@192.168.1.122_0 [url=rtsp://192.168.1.93/1.mp4]URL:rtsp://192.168.1.93/1.mp4[/url] RtspName:admin PW:admin PTZ:1 PTZServer:ptzserver1@192.168.1.122 +--------------END----------------+