嵌入式Linux中SQLITE数据库的应用

在嵌入式Linux开发中,经常需要各种配置信息和操作记录,将这些保存在文件中将显得比较繁琐,保存在数据库中就比较简单。

关于SQLITE数据库的介绍这里就不再讲诉,如果还不知道的可以自己baidu。

    SQLITE的下载地址:点击打开链接。我下载的版本是sqlite-autoconf-3080900.tar.gz。下载后需要交叉编译,交叉编译部分csdn中已经有很多文件讲诉了,这里不再累赘。下面讲一下SQLITE的基本操作。


一 、创建并打开数据库

int open_database()
{
    int database;
    database = sqlite3_open("usr/app/test.db", &db);
    if( database )    
    {    
        printf("Can't open database: %s\n", sqlite3_errmsg(db));    
        sqlite3_close(db);   
		return -1;
    } 
    else
    {
	    printf("You have opened a sqlite3 database named test.db successfully!\n");
    }
    return 1;
}

二、创建数据库表


int create_table_ipTable()
{
	int ret = -1;
	char *zErrMsg = 0; 
	ret = sqlite3_exec( db , "CREATE TABLE IF NOT EXISTS ipTable(id ,ipAddress);" , NULL ,NULL , &zErrMsg );
	if(ret != SQLITE_OK)
	{
		printf("create ipTable err!\n");
	    return -1;
	}
	printf("create ipTable success\n");
	return 1;

}

三 、在表中添加数据记录


int insert_ipTable(int id, char *ip)
{
    sqlite3_stmt *stmt;
	char *zErrMsg = 0;
	int ret;
	char *sql = "insert into ipTable values (?, ?);";
	if (sqlite3_prepare_v2(db, sql, -1, &stmt, NULL) == SQLITE_OK) 
	{
	    sqlite3_bind_int(stmt, 1, id);
		sqlite3_bind_text(stmt, 2, ip, -1, NULL);
		
	}
	if (sqlite3_step(stmt) != SQLITE_DONE)
	{
		printf("bind data err!\n");
		return -1;
	}
	sqlite3_finalize(stmt);
		
	ret = sqlite3_exec(db,sql,NULL,NULL,zErrMsg); 
	if(ret != SQLITE_OK)
	{
		printf("insert data err!\n");
		return -1;
	}
	return 1;	
}

四 、查找数据表中的记录


int select_ipTable(int id, char *ipAddr)
{
    int ret = -1;
    sqlite3_stmt *stmt;
	char *sql = "SELECT * FROM ipTable WHERE id = ?;";
	if(sqlite3_prepare_v2(db, sql, -1, &stmt, NULL)==SQLITE_OK)
	{
		sqlite3_bind_int(stmt, 1, id);
	    while( sqlite3_step(stmt) == SQLITE_ROW) //找到一条记录
	    {
	        int id_name = sqlite3_column_int(stmt, 0);
	        char *temp_ipAddr = sqlite3_column_text(stmt, 1);  //取出第0列的值
	        strcpy(ipAddr,temp_ipAddr);
		    printf("get one history: %d,%s\n",id_name,ipAddr);
			ret = 1;
	    }
	}
	sqlite3_finalize(stmt);
	return ret;
}

五 、 更新表中数据记录


int update_ipTable(int id, char *ipAddre)
{
	int ret;
	sqlite3_stmt *stmt;
	char *errmsg;
	char *zErrMsg = 0;
	char *sql = "UPDATE ipTable SET ipAddress = ? WHERE id = ?;";
	if(sqlite3_prepare_v2(db, sql, -1, &stmt, NULL)==SQLITE_OK)
	{
		sqlite3_bind_text(stmt, 1, ipAddre, -1, NULL);
		sqlite3_bind_int(stmt,2, id);
	}
		
	if (sqlite3_step(stmt) != SQLITE_DONE)
	{
		printf("bind data err!\n");
		return -1;
	}
	sqlite3_finalize(stmt);
				
	ret = sqlite3_exec(db,sql,NULL,NULL,zErrMsg); 
	if(ret != SQLITE_OK)
	{
		printf("insert data err!\n");
		return -1;
	}
	printf("update ip table ok!\n");
	return 1;	

}

六 、 删除表中的数据项


int dell_ipTable((int id)
{
    int ret;
	sqlite3_stmt *stmt;
	char *errmsg;
	char *zErrMsg = 0;
	char *sql = "DELETE FROM ipTableWHERE id= ?;";
	if(sqlite3_prepare_v2(db, sql, -1, &stmt, NULL)==SQLITE_OK)
	{
		sqlite3_bind_int(stmt, 1, id);
	}
	
	if (sqlite3_step(stmt) != SQLITE_DONE)
	{
		printf("bind data err!\n");
		return -1;
	}
	sqlite3_finalize(stmt);		
	ret = sqlite3_exec(db,sql,NULL,NULL,zErrMsg); 
	if(ret != SQLITE_OK)
	{
		printf("delect data err!\n");
		return -1;
	}
	return 1;	
}

七 、操作实例

<pre name="code" class="cpp">void main()
{
    char *serverip = "121.43.225.110";
    char *selfip = "192.168.20.100";

    if(select_ipTable(1,ipAddr) < 0)
    {
        insert_ipTable(1,serverip);
    }
    else
    {
        update_ipTable(1,serverip);
    }
    if(select_ipTable(2,ipAddr) < 0)
    {
        insert_ipTable(2,selfip);
    }
    else
    {
        update_ipTable(2,selfip);
    }
}

 

八 、 实现结果


OK,实现上述几个操作,基本上都可以满足你在项目上的需要了。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值