嵌入式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,實現上述幾個操作,基本上都可以滿足你在項目上的需要了。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章