#if defined(_NT) #include #else #define TRUE 1 #define FALSE 0 #endif #include #include #include #include #include #include #define QUERY_DROP_TABLE "DROP TABLE xxx" #define QUERY_CREATE_TABLE "CREATE TABLE xxx (workdept CHAR(6), level INTEGER) TYPE = INNODB" #define QUERY1 "insert into xxx (workdept, level) values ('A00',18)" #define QUERY2 "insert into xxx (workdept, level) values ('B01',18)" #define QUERY3 "insert into xxx (workdept, level) values ('C01',20)" #define QUERY4 "insert into xxx (workdept, level) values ('E01',16)" #define QUERY5 "insert into xxx (workdept, level) values ('D11',16)" #define QUERY6 "insert into xxx (workdept, level) values ('D21',16)" #define QUERY7 "insert into xxx (workdept, level) values ('E11',16)" #define QUERY8 "insert into xxx (workdept, level) values ('E21',14)" #define QUERY9 "insert into xxx (workdept, level) values ('A00',19)" #define QUERY10 "insert into xxx (workdept, level) values ('A00',14)" #define QUERY11 "insert into xxx (workdept, level) values ('C01',16)" #define QUERY12 "insert into xxx (workdept, level) values ('C01',18)" #define QUERY13 "insert into xxx (workdept, level) values ('D11',16)" #define QUERY14 "insert into xxx (workdept, level) values ('D11',17)" #define QUERY15 "insert into xxx (workdept, level) values ('D11',16)" #define QUERY16 "insert into xxx (workdept, level) values ('D11',17)" #define QUERY17 "insert into xxx (workdept, level) values ('D11',16)" #define QUERY18 "insert into xxx (workdept, level) values ('D11',16)" #define QUERY19 "insert into xxx (workdept, level) values ('D11',17)" #define QUERY20 "insert into xxx (workdept, level) values ('D11',18)" #define QUERY21 "insert into xxx (workdept, level) values ('D21',14)" #define QUERY22 "insert into xxx (workdept, level) values ('D21',17)" #define QUERY23 "insert into xxx (workdept, level) values ('D21',15)" #define QUERY24 "insert into xxx (workdept, level) values ('D21',16)" #define QUERY25 "insert into xxx (workdept, level) values ('D21',15)" #define QUERY26 "insert into xxx (workdept, level) values ('E11',17)" #define QUERY27 "insert into xxx (workdept, level) values ('E11',12)" #define QUERY28 "insert into xxx (workdept, level) values ('E11',14)" #define QUERY29 "insert into xxx (workdept, level) values ('E11',12)" #define QUERY30 "insert into xxx (workdept, level) values ('E21',16)" #define QUERY31 "insert into xxx (workdept, level) values ('E21',14)" #define QUERY32 "insert into xxx (workdept, level) values ('E21',16)" MYSQL *mysql = NULL; void print_mysql_error(MYSQL *mysql) { fprintf(stderr, "%d:%s\n", mysql_errno(mysql), mysql_error(mysql)); } void print_mysql_stmt_error(MYSQL_STMT *stmt) { fprintf(stderr, "stmt error=%s\n", mysql_stmt_error(stmt)); } void exec_query(const char *query, const int IgnoreError) { if (mysql_query(mysql, query)) { if (IgnoreError == FALSE) { fprintf(stderr, "mysql_query(), failed\n"); fprintf(stderr, "query=%s\n", query); goto ErrorExit; } } return; ErrorExit: print_mysql_error(mysql); return; } int select_statement() { #define QUERY "select workdept, avg(level) from xxx group by workdept" MYSQL_STMT *stmt; MYSQL_BIND bind_array[10]; char name[256]; int rc; double avg; const unsigned long type= CURSOR_TYPE_READ_ONLY; unsigned long name_len; stmt = mysql_stmt_init(mysql); if (!stmt) { fprintf(stderr, " mysql_stmt_init(), out of memory\n"); goto ErrorExit; } mysql_stmt_attr_set(stmt, STMT_ATTR_CURSOR_TYPE, (const void *) &type); if (mysql_stmt_prepare(stmt, QUERY, strlen(QUERY))) { fprintf(stderr, " mysql_stmt_prepare(), failed\n"); print_mysql_stmt_error(stmt); goto ErrorExit; } /* output bind */ memset(bind_array, 0, sizeof(bind_array)); bind_array[0].buffer_type= MYSQL_TYPE_STRING; bind_array[0].buffer= (char *) name; bind_array[0].buffer_length= sizeof(name); bind_array[0].length= &name_len; bind_array[1].buffer_type= MYSQL_TYPE_DOUBLE; bind_array[1].buffer= (char *) &avg; if (mysql_stmt_bind_result(stmt, bind_array)) { fprintf(stderr, " mysql_stmt_bind_result(), failed\n"); print_mysql_stmt_error(stmt); goto ErrorExit; } if (mysql_stmt_execute(stmt)) { fprintf(stderr, " mysql_stmt_execute(), failed\n"); print_mysql_stmt_error(stmt); goto ErrorExit; } for (;;) { rc = mysql_stmt_fetch(stmt); if (rc == MYSQL_NO_DATA) { printf("no more rows found\n"); break; } else { if (rc == 0) { name[name_len]= '\0'; printf("%s;%8.4f\n", name, avg); } } } if (mysql_stmt_close(stmt)) { fprintf(stderr, " mysql_stmt_close(), failed\n"); print_mysql_stmt_error(stmt); goto ErrorExit; } return(TRUE); ErrorExit: print_mysql_error(mysql); return(FALSE); } int main(void) { int i = 0; if ((mysql = mysql_init((MYSQL *) 0)) == NULL) goto ErrorExit; if (mysql_real_connect(mysql, "", "root", "root", "mysql", 0, NULL, 0) == NULL) goto ErrorExit; exec_query(QUERY_DROP_TABLE, TRUE); exec_query(QUERY_CREATE_TABLE, FALSE); exec_query(QUERY1, FALSE); exec_query(QUERY2, FALSE); exec_query(QUERY3, FALSE); exec_query(QUERY4, FALSE); exec_query(QUERY5, FALSE); exec_query(QUERY6, FALSE); exec_query(QUERY7, FALSE); exec_query(QUERY8, FALSE); exec_query(QUERY9, FALSE); exec_query(QUERY10, FALSE); exec_query(QUERY11, FALSE); exec_query(QUERY12, FALSE); exec_query(QUERY13, FALSE); exec_query(QUERY14, FALSE); exec_query(QUERY15, FALSE); exec_query(QUERY16, FALSE); exec_query(QUERY17, FALSE); exec_query(QUERY18, FALSE); exec_query(QUERY19, FALSE); exec_query(QUERY20, FALSE); exec_query(QUERY21, FALSE); exec_query(QUERY22, FALSE); exec_query(QUERY23, FALSE); exec_query(QUERY24, FALSE); exec_query(QUERY25, FALSE); exec_query(QUERY26, FALSE); exec_query(QUERY27, FALSE); exec_query(QUERY28, FALSE); exec_query(QUERY29, FALSE); exec_query(QUERY30, FALSE); exec_query(QUERY31, FALSE); exec_query(QUERY32, FALSE); /* */ (void) select_statement(); mysql_close(mysql); return(0); ErrorExit: print_mysql_error(mysql); return(1); }