___ ___ __ __ _____ ___ _ __ | T T| T T/ ___/ / \ | T / ] | _ _ || | ( \_ Y Y| | / / | \_/ || ~ |\__ T| Q || l___ / / | | |l___, |/ \ || || T/ \_ | | || !\ |l || |\ | l___j___jl____/ \___j \__,_jl_____j \____j
%-----------------------------------------------------------------% | Do you like C language programming ? |
| With a simply mathematical method, row and coloum count so easy |
| to print out database fields ! |
| >> Modified at 26 October 2013 | %-----------------------------------------------------------------%
Mysql query using C programming, here are the output sample : wardi@darkstar:~/programming/c$ ./myquery query> show tables; +------------------+ | Tables_in_smsd | +------------------+ | daemons | | debug_log | | gammu | | guided_sms |
| inbox | | inbox_view | | outbox | | outbox_multipart | | pbk | | pbk_groups | | phones | | sentitems | | sentitems_view | +------------------+
13 rows returned query> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | smsd | | test | +--------------------+ 7 rows returned query> select * from daemons; +-------+------+ | Start | Info | +-------+------+ +-------+------+ 0 rows returned query> select * from phones; +----+---------------------+---------------------+---------------------+------+---------+-----------------+--------------------------------------------------------+---------+--------+------+----------+ | ID | UpdatedInDB | InsertIntoDB | TimeOut | Send | Receive | IMEI | Client | Battery | Signal | Sent | Received | +----+---------------------+---------------------+---------------------+------+---------+-----------------+--------------------------------------------------------+---------+--------+------+----------+ | | 2012-06-12 13:58:12 | 2012-06-12 09:44:08 | 2012-06-12 13:58:22 | yes | yes | 354056300814201 | Gammu 1.31.0, Windows Server 2007, GCC 4.6, MinGW 3.11 | 0 | 60 | 0 | 0 | +----+---------------------+---------------------+---------------------+------+---------+-----------------+--------------------------------------------------------+---------+--------+------+----------+ 1 rows returned Here the full source code : /* * myquery.c * Interactively mysql server query * I wrote it for fun, refreshing C programming * You must match you self this code * about host, username, password, database name, * and mysql socket * * Compile this code with GCC standar and mysql installed, * % cc myquery.c -o myquery -I /usr/include/mysql/ -lmysqlclient -std=c99 * * Author: Suwardi, * Mail: war49@swevel.com */ #include <stdio.h> #include <mysql.h> #include <stdlib.h> #include <string.h> MYSQL *conn; MYSQL *do_connect (const char *, const char *, const char *, const char *, unsigned int, const char *, unsigned int); static void do_query (MYSQL *, const char *); static void print_error (MYSQL *, const char *); static void print_dashes (MYSQL_RES *); static void process_result (MYSQL *, MYSQL_RES *); int main (void) { const char *host = "localhost"; const char *user = "wardi"; const char *pw = "wardiabc123"; const char *db = "abc"; const char *socket="/var/lib/mysql/mysql.sock"; if (do_connect (host, user, pw, db, 0, socket, 0) == NULL) { fprintf (stderr, "connect fail\n"); exit (255); } while (1) { char buf[1024]; fprintf (stderr, "query> "); if (fgets (buf, sizeof (buf), stdin) == NULL) break; do_query (conn, buf); } return (0); } MYSQL *do_connect (const char *host, const char *user, const char *pw, const char *db, unsigned int port, const char *socket, unsigned int flags) { if ((conn = mysql_init (NULL)) == NULL) { print_error (conn, "mysql_init()"); return NULL; } if ((mysql_real_connect (conn, host, user, pw, db, 0, socket, 0)) == NULL) { print_error (conn, "mysql_real_connect() fail"); return NULL; } return conn; } static void do_query (MYSQL *conn, const char *query) { MYSQL_RES *result; unsigned int field_count; if (mysql_query (conn, query) != 0) { print_error (conn, "process_query() fail"); return; } result = mysql_store_result (conn); if (result == NULL) { if (mysql_field_count (conn) > 0) print_error (conn, "problem processing result set"); else printf ("%lu rows affected\n", (unsigned long) mysql_affected_rows (conn)); }else{ process_result (conn, result); mysql_free_result (result); } } static void print_error (MYSQL *conn, const char *mesg) { fprintf (stderr, "%s -> %u (%s)\n", mesg, mysql_errno (conn), mysql_error (conn)); } static void print_dashes (MYSQL_RES *result) { MYSQL_FIELD *field; unsigned int i, j; mysql_field_seek (result, 0); fputc ('+', stdout); for (i = 0; i < mysql_num_fields (result); i++) { field = mysql_fetch_field (result); for (j = 0; j < field->max_length + 2; j++) fputc ('-', stdout); fputc ('+', stdout); } fputc ('\n', stdout); } static void process_result (MYSQL *conn, MYSQL_RES *result) { MYSQL_FIELD *field; MYSQL_ROW row; unsigned int i, col_len; /* column display width */ mysql_field_seek (result, 0); for (i = 0; i < mysql_num_fields (result); i++) { field = mysql_fetch_field (result); col_len = strlen (field->name); if (col_len < field->max_length) col_len = field->max_length; if (col_len < 4 && !IS_NOT_NULL (field->flags)) col_len = 4; field->max_length = col_len; } print_dashes (result); fputc ('|', stdout); mysql_field_seek (result, 0); for (i = 0; i < mysql_num_fields (result); i++) { field = mysql_fetch_field (result); printf (" %-*s |", field->max_length, field->name); } fputc ('\n', stdout); print_dashes (result); while ((row = mysql_fetch_row (result)) != NULL) { mysql_field_seek (result, 0); fputc ('|', stdout); for (i = 0; i < mysql_num_fields (result); i++) { field = mysql_fetch_field (result); if (row[i] == NULL) printf (" %-*s |", field->max_length, "NULL"); else if (IS_NUM (field->type)) printf (" %-*s |", field->max_length, row[i]); else printf (" %-*s |", field->max_length, row[i]); } fputc ('\n', stdout); } print_dashes (result); printf ("%lu rows returned\n", (unsigned long) mysql_num_rows (result)); }