SQLite学习笔记--利用sqlite3库函数自定义部分数据库函数

利用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);
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值