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