您的位置:首页 > 编程语言 > C语言/C++

sqlite学习笔记8:C语言中使用sqlite之创建表

2016-04-08 11:51 483 查看
前面已经说了怎样打开和关闭数据库,这次要说得是怎样运行SQL语句,来创建一张表。

要用的的函数:

sqlite3_exec(sqlite3* db, const char *sql, sqlite_callback callback, void *data, char **errmsg)
參数:
db:已经打开的数据库实例
sql:SQL语句,是一个字符串
callback:是一个回调函数
data:做为回调函数的第一个參数
errmsg:用于带回错误信息
该回调函数有两种返回值类型.
1.返回零:sqlite3_exec() 将继续运行查询.
2.返回非零:sqlite3_exec()将马上中断查询, 且 sqlite3_exec() 将返回 SQLITE_ABORT.




回调函数的格式例如以下:
int sqlite_callback(
void* pv,    /* 由 sqlite3_exec() 的第四个參数传递而来 */
int argc,        /* 表的列数 */
char** argv,    /* 指向查询结果的指针数组, 能够由 sqlite3_column_text() 得到 */
char** col        /* 指向表头名的指针数组, 能够由 sqlite3_column_name() 得到 */
);

參数格式:
传给sqlite3_exec的回调函数,用来显示查询结果
对每一条查询结果调用一次该回调函数
參数:
pv:由sqlite3_exec传递的初始化參数
argc:表头的列数
col:表头的名字数组指针
argv:表头的数据数组指针
返回值:
1:中断查找
0:继续列举查询到的数据


实例:

#include <stdio.h>
#include <stdlib.h>
#include "sqlite/sqlite3.h"

#define DB_NANE "sqlite/test.db"

sqlite3 *db = NULL;
char* sql = NULL;
char *zErrMsg = NULL;
int ret = 0;

typedef enum{
false,
true
} bool;

static int callback(void *NotUsed, int argc, char **argv, char **azColName)
{
int i = 0;
for(i=0; i < argc; i++){
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
}
printf("\n");

return 0;
}

bool connectDB()
{
ret = sqlite3_open(DB_NANE, &db);

if( ret != SQLITE_OK){
fprintf(stderr, "Error open database: %s\n", sqlite3_errmsg(db));
sqlite3_free(zErrMsg);

return false;
}

fprintf(stdout, "Successfully opened database\n");
return true;
}
/* 相对于前篇文章加入了这个函数 */
bool createTable()
{
/* Create SQL statement */
sql = "CREATE TABLE COMPANY("  \
"ID INT PRIMARY KEY     NOT NULL," \
"NAME           TEXT    NOT NULL," \
"AGE            INT     NOT NULL," \
"ADDRESS        CHAR(50)," \
"SALARY         REAL );";

/* Execute SQL statement */
ret = sqlite3_exec(db, sql, callback, 0, &zErrMsg);
if( ret != SQLITE_OK ){
fprintf(stderr, "Error SQL: %s\n", zErrMsg);
sqlite3_free(zErrMsg);

return false;
}

fprintf(stdout, "Successfully table created\n");

return true;
}

bool closeDB()
{
int ret = 0;
ret = sqlite3_close(db);
if ( ret == SQLITE_BUSY ){
return false;
}

return true;
}

int main(int argc, char* argv[])
{
connectDB();
createTable();/*添加了一个函数调用*/
closeDB();

return 0;
}


这个函数仅仅能运行一次,第二次运行会报错说表已经存在。删除生成的test.db能够再次运行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: