假设数据库为my.db,有数据表student。
CREATE TABLE IF NOT EXISTS student (no integer primary key, name text, score real);
sqlite3_open
int sqlite3_open(char *path, sqlite3 **db);
sqlite3_close
int sqlite3_close(sqlite3 *db);
sqlite3_errmsg
const char *sqlite3_errmsg(sqlite3 *db);
sqlite3_get_table
int sqlite3_get_table(sqlite3 *db, const char *sql, char ***resultp, int *nrow, int *ncolumn, char **errmsg);
void do_show_sample(sqlite3 *db) { char **result, *errmsg;int nrow, ncolumn, i, j,index; if (sqlite3_get_table(db, "select * from student", &result, &nrow, &ncolumn,&errmsg) != 0){ printf("error : %s\n", errmsg); sqlite3_free(errmsg);} index = ncolumn;for (i=0; i for (j=0; j printf("%-8s : %-8s\n", result[j], result[index]);index++; } printf("************************\n");} sqlite3_free_table(result); return;
}
sqlite3_exec
typedef int (*sqlite3_callback)(void *, int, char **, char **);
int sqlite3_exec(sqlite3 *db, const char *sql, sqlite3_callback callback, void *,char **errmsg);
typedef int (*sqlite3_callback)(void *para, int f_num, char **f_value, char **f_name);
sqlite3 *db;
char *errmsg,**resultp;
int callback(void *para, int f_num, char **f_val, char **f_name){int i;for (i=0; i printf("%-8s", f_val[i]); }printf("\n"); return 0;
}
void do_show(sqlite3 *db){char *errmsg; printf("no name score\n"); if (sqlite3_exec(db, "select * from student", callback, NULL, &errmsg) != 0) { printf("error : %s\n", sqlite3_errmsg(db));}printf("\n");return;
}
回调函数方法实现的代码,需要实现一个回调函数:callback。函数sqlite3_exec()在解析命令"select * from student" ,每获取到一行数据就会调用一次回调函数
编译需要使用第三方库lsqlite3。
gcc student.c -o run -lsqlite3
sqlite3 *pdb
数据库句柄,跟文件句柄FILE很类似
sqlite3_stmt *stmt
这个相当于ODBC的Command对象,用于保存编译好的SQL语句
sqlite3_exec()
执行非查询的sql语句
sqlite3_prepare()
准备sql语句,执行select语句或者要使用parameter bind时,用这个函数(封装 了sqlite3_exec)
Sqlite3_step()
在调用sqlite3_prepare后,使用这个函数在记录集中移动
还有一系列的函数,用于从记录集字段中获取数据,如:
sqlite3_column_text()
取text类型的数据
sqlite3_column_blob()
取blob类型的数据
sqlite3_column_int()
取int类型的数据
#include
#include
#include
#include void do_insert(sqlite3 *db)
{int no;char name[16];float score;char sqlstr[128], *errmsg;printf("input no : ");scanf("%d", &no);printf("input name : ");scanf("%s", name);printf("input score : ");scanf("%f", &score);sprintf(sqlstr, "insert into student values (%d, '%s', %.1f)", no, name, score);#if __DEBUGprintf("cmd:%s\n",sqlstr);#endifif (sqlite3_exec(db, sqlstr, NULL, NULL, &errmsg) != 0){printf("error : %s\n", sqlite3_errmsg(db));}else{printf("insert is done\n");}printf("\n");return;
}void do_delete(sqlite3 *db)
{char *errmsg;char sqlstr[128], expression[64];printf("input expression : ");scanf("%s", expression);//name='ma'sprintf(sqlstr, "delete from student where %s", expression);
#if __DEBUGprintf("cmd:%s\n",sqlstr);
#endifif (sqlite3_exec(db, sqlstr, NULL, NULL, &errmsg) != 0){printf("error : %s\n", sqlite3_errmsg(db));}else{printf("deletet is done\n");}printf("\n");return;
}int callback(void *para, int f_num, char **f_val, char **f_name)
{int i;for (i=0; iprintf("%-8s", f_val[i]);}printf("\n");return 0;
}void do_show(sqlite3 *db)
{char *errmsg;printf("no name score\n");if (sqlite3_exec(db, "select * from student", callback, NULL, &errmsg) != 0){printf("error : %s\n", sqlite3_errmsg(db));}printf("\n");return;
}void do_show_sample(sqlite3 *db){char **result, *errmsg;int nrow, ncolumn, i, j, index;if (sqlite3_get_table(db, "select * from student", &result, &nrow, &ncolumn, &errmsg) != 0){printf("error : %s\n", errmsg);sqlite3_free(errmsg);}index = ncolumn;for (i=0; ifor (j=0; jprintf("%-8s : %-8s\n", result[j], result[index]);index++;}printf("************************\n");}sqlite3_free_table(result);return;}int main()
{sqlite3 *db;int n;char clean[64];if (sqlite3_open("my.db", &db) < 0){printf("fail to sqlite3_open : %s\n", sqlite3_errmsg(db));return -1;}while ( 1 ){printf("*********************************************\n");printf("1: insert record \n2: delete record \n3: show record \n4: quit\n");printf("*********************************************\n");printf("please select : "); if (scanf("%d", &n) != 1){fgets(clean, 64, stdin);printf("\n");continue;}switch ( n ){case 1 :do_insert(db);break;case 2 :do_delete(db);break;case 3 :do_show_sample(db);break;case 4 :sqlite3_close(db);exit(0);}}return 0;
}