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