SQLite学习笔记--利用sqlite3库函数自定义部分数据库函数
利用sqlite3库函数自定义部分数据库函数定义一个static修饰的全局变量sqlite3 *db,防止在其他源文件中引起错误;static sqlite3 *db = NULL;打开数据库,以及创建一个表:需要传入一个db_name;int sqlite_init(char *db_name){intrc;char*zErrMsg = 0;char*sql;rc=sqlite3_open(db
·
利用sqlite3库函数自定义部分数据库函数
定义一个static修饰的全局变量sqlite3 *db,防止在其他源文件中引起错误;
static sqlite3 *db = NULL;
打开数据库,以及创建一个表:需要传入一个db_name;
int sqlite_init(char *db_name)
{
int rc;
char *zErrMsg = 0;
char *sql;
rc=sqlite3_open(db_name, &db);
if(rc!=SQLITE_OK)
{
return -1;
}
sql = "CREATE TABLE IF NOT EXISTS data_table(ID INTEGER PRIMARY KEY AUTOINCREMENT,NO CHAR(16),TIME CHAR(32),TEMPERATURE CHAR(16));"; //创建一个表,表名为data_table
rc=sqlite3_exec(db, sql, 0, 0, &zErrMsg);
if(rc!=SQLITE_OK)
{
sqlite3_close(db);
sqlite3_free(zErrMsg);
return -2;
}
return 0;
}
删除一个表:
int sqlite_drop(void)
{
int rc;
char *zErrMsg = 0;
char *sql;
sql = "DROP TABLE data_table;";
rc=sqlite3_exec(db, sql,0, 0, &zErrMsg);
if(rc!=SQLITE_OK)
{
sqlite3_close(db);
sqlite3_free(zErrMsg);
return -1;
}
else
{
return 0;
}
}
向表中插入数据:
int sqlite_insert(char *buf1, int m, char *buf2, int n, char *buf3, int p) //传入三个保存需要插入数据的buf
{
int rc;
char *zErrMsg =0;
char data[256];
char *sql;
snprintf(data, sizeof(data), "insert into data_table(NO,TIME,TEMPERATURE)values('%s','%s','%s');", buf1, buf2, buf3);
sql=data;
rc=sqlite3_exec(db, sql ,0 ,0,&zErrMsg);
if(rc!=SQLITE_OK)
{
sqlite3_close(db);
sqlite3_free(zErrMsg);
return -1;
}
else
{
return 0;
}
}
查询使用显示结果的回调函数:
int callback(void *notused,int argc,char **argv,char **name)
{
int i;
for(i=0;i<argc;i++)
{
printf("%s=%s\n", name[i], argv[i] ? argv[i] : "NULL");
}
printf("\n");
return 0;
}
表中数据的查询:可通过n传入查询条数(降序)
int sqlite_select(int n)
{
int rc;
char *zErrMsg = 0;
char *sql;
char data[64];
snprintf(data, sizeof(data),"SELECT * FROM data_table ORDER BY ID DESC LIMIT %d;", n);
sql = data;
rc=sqlite3_exec(db, sql, callback, 0, &zErrMsg);
if(rc!=SQLITE_OK)
{
sqlite3_close(db);
sqlite3_free(zErrMsg);
return -1;
}
else
{
return 0;
}
}
从表中读取一条数据:(升序)
int sqlite_get_data(char *buf, int m) //传入一个保存读取数据的buf
{
int rc;
int row = 0;
int column = 0;
char *zErrMsg = 0;
char *sql;
char **result;
sql = "SELECT * FROM data_table ORDER BY ID ASC LIMIT 1;";
rc=sqlite3_get_table(db, sql, &result, &row, &column, &zErrMsg);
if(rc!=SQLITE_OK)
{
sqlite3_close(db);
sqlite3_free(zErrMsg);
return -1;
}
else
{
memset(buf, 0, m);
snprintf(buf, m, "%s/%s/%s", result[5], result[6], result[7]);
return 0;
}
}
从表中删除一条数据:(传入需要删除数据的ID)
int sqlite_delete(char *ID)
{
int rc;
char *zErrMsg = 0;
char *sql;
char data[64];
snprintf(data, sizeof(data), "DELETE FROM data_table WHERE ID =%s;", ID);
sql=data;
rc=sqlite3_exec(db, sql, 0, 0, &zErrMsg);
if(rc!=SQLITE_OK)
{
sqlite3_close(db);
sqlite3_free(zErrMsg);
return -1;;
}
else
{
return 0;
}
}
查询表中有多少行数据:
int sqlite_get_row(void)
{
char **result;
int row = 0;
int column= 0;
int rc;
char *zErrMsg = 0;
char *sql;
sql = "SELECT * FROM data_table;";
rc=sqlite3_get_table(db, sql, &result, &row, &column, &zErrMsg);
if(rc!=SQLITE_OK)
{
sqlite3_close(db);
sqlite3_free(zErrMsg);
printf("errno:%s\n",zErrMsg);
return -1;
}
else
{
return row;
}
}
关闭数据库:
void sqlite_close(void)
{
sqlite3_close(db);
}
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献2条内容
所有评论(0)