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

2019-07-13 00:37发布

在嵌入式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 ", sqlite3_errmsg(db)); sqlite3_close(db); return -1; } else { printf("You have opened a sqlite3 database named test.db successfully! "); } 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! "); return -1; } printf("create ipTable success "); 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! "); return -1; } sqlite3_finalize(stmt); ret = sqlite3_exec(db,sql,NULL,NULL,zErrMsg); if(ret != SQLITE_OK) { printf("insert data err! "); 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 ",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! "); return -1; } sqlite3_finalize(stmt); ret = sqlite3_exec(db,sql,NULL,NULL,zErrMsg); if(ret != SQLITE_OK) { printf("insert data err! "); return -1; } printf("update ip table ok! "); 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! "); return -1; } sqlite3_finalize(stmt); ret = sqlite3_exec(db,sql,NULL,NULL,zErrMsg); if(ret != SQLITE_OK) { printf("delect data err! "); return -1; } return 1; }

七 、操作实例

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,实现上述几个操作,基本上都可以满足你在项目上的需要了。