SQLite3基本操作方法
(2010-12-18 13:53:23)
转载▼
分类: 数据存储 |
关键词:预处理语句,SQLite3常用操作方法,执行,执行结果,取出查询结果中的数据
课件来源:iBokan的iwind老师?
执行语句步骤:
•打开SQLite数据库文件,返回sqlite3 *指针
•预处理语句
•执行语句
•如果执行的是查询语句,则可以取出查询结果中的数据
关键代码:
1.预处理
intsqlite3_prepare_v2(sqlite3 *db, const char *zSql, intnBytes, sqlite3_stmt **ppStmt, const char **pzTail);
//通常nBytes可以为-1, pzTail可以为NULL,这样就简化了该函数的使用
SQL常用方法总结:
1)查询
"SELECT * FROM log ORDER BY ID DESC" (ID按照降序排列)
2)增加
"INSERT INTO log (title,content,created_time) VALUES (?,?,?)"
3)修改
"UPDATE log SET title=?,content=? WHERE ID=?"
4)删除
"DELETE FROM log WHERE ID=?"
5)统计个数
"SELECT COUNT(*) FROM log"
详细使用可参考W3CSchool http://www.w3school.com.cn/sql/sql_syntax.asp
2.取出查询结果中的数据
while(SQLITE_ROW== sqlite3_step(stmt)) {
intID=sqlite3_column_int(stmt,0);
...
}
3.回收预处理语句对象
intsqlite3_finalize(sqlite3_stmt*pStmt);
应用示例1:查询
sqlite3 *db = [DB setup];//打开数据库
sqlite3_stmt *stmt;//生成一个可执行的对象
//预处理语句(ID按照降序排列),-1可以看成是一个最大的正整数
intresult =sqlite3_prepare_v2(db,"SELECT * FROM log ORDER BY ID DESC", -1, &stmt,NULL);
if (result == SQLITE_OK) {
NSMutableArray *logs = [[NSMutableArray alloc]init];//用于收取查询结果
while(SQLITE_ROW==sqlite3_step(stmt)) {
intID =sqlite3_column_int(stmt,0);//保存查询结果 获取log的编号
const unsigned char*title =sqlite3_column_text(stmt,1);//获取log的字符串,’1‘是第2列
const unsigned char*content =sqlite3_column_text(stmt,2);
inttime =sqlite3_column_int(stmt,3);//存放的是从1997开始到现在的秒数 用NSData转换
//用之前获取的数据创建一个新的log对象 字符串要改变编码格式后才能显示
Log*log = [[Log alloc]initWithId:IDtitle:[NSString stringWithUTF8String:(const char*)title]
content:[NSString stringWithUTF8String:(const char*)content]createdAt:time];
[logs addObject:log];
[log release];
}
sqlite3_finalize(stmt);//(一定要写)回收预处理语句对象
return[logsautorelease];
}
应用示例2:添加
+ (int) createWithTitle:(NSString*) title content:(NSString*) content {
sqlite3*db = [DB setup];
sqlite3_stmt*stmt;
sqlite3_prepare_v2(db,"INSERT INTO log (title,content,created_time) VALUES (?,?,?)", -1, &stmt,NULL);
//将上面的三个?绑定
sqlite3_bind_text(stmt,1, [titleUTF8String], -1,NULL);
sqlite3_bind_text(stmt,2, [contentUTF8String], -1,NULL);
sqlite3_bind_int(stmt,3,time(NULL));//放回当前的时间(s) 将当前时间绑定
intresult =sqlite3_step(stmt);
sqlite3_finalize(stmt);//数据在此时存储
returnresult;
}