已经不是第一次用sqlite了,但是,每次都忘记要记录一下。每次都要重新找资料,所以,做完实验我就写下来吧。
我的业务场景是这样子的,我板子上跑的是linux,一个通信程序需要调用数据库。期间我只有一张表用于接收数据,暂时称为pre表。其余的表都是通过这张表的数据去更新自己的数据。
首先,我遇到的问题是,需要多字段联合使用唯一性,比如:id和dev两个字段我要求其中有一个数据变动了,我就去更新这条数据。
如:表中id=1,dev_num=2。然后insert or replace id=1,dev_num=2。这种情况,只更新原来的条目。
表中id=1,dev_num=2。然后insert or replace id=1,dev_num=3。这种情况,会插入一条新的记录。
下面是我的更新或者插入语句的写法:
sql = "insert or replace into fpgaData(id, dev_num, state_flg, error_cd, present_p, power) values(?, ?, ?, ?, ?, ?)";
if(sqlite3_prepare_v2(db, sql, -1, &stmt, NULL) == SQLITE_OK){
//bind data for insert new line, total 1 line
sqlite3_bind_int(stmt, 1, 1);
.....
sqlite3_step(stmt);
sqlite3_finalize(stmt); //finalize the stmt
}else{
printf("SQL error2: %s\n", sqlite3_errmsg(db));
sqlite3_finalize(stmt);
return 1;
}
这么做的原因是,保证数据库不会无限扩张,我的业务需求,也是需要数据在一定范围内的。开始使用主键定义id,发现dev这个字段无法唯一&#