Sqlite3的使用小结(不定期更新)
来源:互联网 发布:淘宝口红正品店铺 编辑:程序博客网 时间:2024/05/21 07:58
最近在做Sqlite3的性能测试:
测试一:
首先建立一个数据库;
创建一个表格:
开始循环
{
向数据库里面插入1000数据;
sleep(五秒)
删除所有数据;
sleep(五秒)
}
通过程序的CPU占用和内存使用来判断性能。
在测试过程中发现了sqlite的插入时间很久,于是我查了查资料:
原因:它以文件的形式存在磁盘中,每次访问时都要打开一次文件,如果对数据库进行大量的操作,就很慢。
解决办法:用事物的形式提交,因为开始事务后,进行的大量操作语句都保存在内存中,当提交时才全部写入数据库,此时,数据库文件也只用打开一次。如果操作错误,还可以回滚事务。
接口:事务的操作没有特别的接口函数,就是一个普通的 sql 语句而已,分别如下:
begin transaction --- 开始一个事务commit transaction --- 提交事务
rollback transaction --- 回滚事务
在插入1000条记录前后分别使用:begin transaction 和 commit transaction
发现速度果然上去了。原来插入1000条需要几十秒;修改后只需要不到1秒。
想想也是,原先进行了1000次的打开文件、写文件、关闭文件的操作费时费力也是正常的。
注意事项二:
关于sqlite3的内存泄露问题。
1. 在使用
sqlite3_get_table(
sqlite3 *db, /* An open database */
const char *zSql, /* SQL to be evaluated */
char ***pazResult, /* Results of the query */
int *pnRow, /* Number of result rows written here */
int *pnColumn, /* Number of result columns written here */
char **pzErrmsg /* Error msg written here */
);
后,要调用 sqlite3_free_table(pazResult) 来释放结果集,防止内存泄露
2. 在使用
sqlite3_exec(
sqlite3*, /* An open database */
const char *sql, /* SQL to be evaluated */
int (*callback)(void*,int,char**,char**), /* Callback function */
void *, /* 1st argument to callback */
char **errmsg /* Error msg written here */
);
后,要调用 sqlite3_free(*errmsg) 来释放错误信息,防止内存泄露
<1>准备语句(prepared statement)对象
typedef struct sqlite3_stmt sqlite3_stmt;
使用sqlite3_finalize()销毁这个对象- Sqlite3的使用小结(不定期更新)
- Sqlite3的使用小结(不定期更新)
- 消息使用的积累(不定期更新)
- TextView的使用(不定期更新)
- SQL知识点小结(不定期更新)
- Sqlite3的使用小结
- 关于lex与yacc的学习使用(不定期更新)
- android开发过程中遇到的问题小结(不定期更新)
- Fresco 使用要点(不定期更新)
- 英语介词使用总结(不定期更新)
- git使用错误大全(不定期更新)
- Excel使用技巧(不定期更新)
- Android开发小结(不定期更新2011-06-28)
- android-listview的总结(不定期更新)
- CodeBlocks 的使用方法(不定期更新)
- java的一些总结(不定期更新)
- oracle的坑(不定期更新)
- 要看的文章(不定期更新)
- Python 字符串操作
- AIX中一些文件處理命令用法
- android录音和得到音量
- linux raid1搭建教程
- mybatis-spring集成:配置多数据库源中遇到的问题--MapperScannerConfigurer配置
- Sqlite3的使用小结(不定期更新)
- HashMap和Hashtable及HashSet的区别
- Android 编译 C 库 .
- Hardkernel推尺寸最小功能强悍的四核ARM PC
- 如何修改lListPreference弹出的dialog的样式
- Google Analytics追踪不同渠道的广告流量
- 使用Socket判断端口是否被占用
- Android 上,用普通的 am-linux-gcc 编译 C 程序。 .
- Oracle自增ID实现