切换导航
首页
技术问答
编程语言
前端开发
移动开发
开发工具
程序设计
行业应用
CMS系统
服务器
频道导航
▸ PHP
▸ Java
▸ Java SE
▸ Python
▸ C#
▸ C&C++
▸ Ruby
▸ VB
▸ asp.Net
▸ Go
▸ Perl
▸ netty
▸ Django
▸ Delphi
▸ Jsp
▸ .NET Core
▸ Spring
▸ Flask
▸ Springboot
▸ SpringMVC
▸ Lua
▸ Laravel
▸ Mybatis
▸ Asp
▸ Groovy
▸ ThinkPHP
▸ Yii
▸ swoole
▸ HTML
▸ HTML5
▸ JavaScript
▸ CSS
▸ jQuery
▸ Bootstrap
▸ Angularjs
▸ TypeScript
▸ Vue
▸ Dojo
▸ Json
▸ Electron
▸ Node.js
▸ extjs
▸ Express
▸ XML
▸ ES6
▸ Ajax
▸ Flash
▸ Unity
▸ React
▸ Flex
▸ Ant Design
▸ Web前端
▸ 微信小程序
▸ 微信公众号
▸ iOS
▸ Android
▸ Swift
▸ Hybrid
▸ Cocos2d-x
▸ Flutter
▸ Xcode
▸ Silverlight
▸ cocoa
▸ Cordova
前端之家
Sqlite
SQLite批量插入和其他一些使用心得
SQLite批量插入和其他一些使用心得
2020-07-16
Sqlite
前端之家
前端之家
收集整理的这篇文章主要介绍了
SQLite批量插入和其他一些使用心得
,
前端之家
小编觉得挺不错的,现在分享给大家,也给大家做个参考。
sql
ite是我在客户端上使用得最多的
数据库
,方便易用稳定强大,其
支持
很多的平台和语言:我分别在Windows (
C++、
QT)、Android、IOS上开发过使用
sql
ite来保存客户端本地数据的应用。下面说说对使用
sql
ite的一些心得。
1、批量插入。
很多人发现使用
sql
ite插入大量数据的时候非常慢。我有印象刚使用
sql
ite的时候发现插入2000条数据(10列左右)居然要好几分钟,速度慢得令人发指。但后来发现如果是正确使用
sql
ite,一般这是在小几百毫秒就能完成的工作。要点:
A)务必要使用事务。这点可以
数量
级地提高批量插入的速度。
B)
使用
Statement并用好,具体地说是: prepare(
此步奏只运行一次
) -> (开始处理第一条记录) -> bind(填充第一列) -> bind
(填充第二列……)
-> execute(执行插入) -> clearBind(
别忘了清除填充的数据
) ->
(开始处理第二条记录)
-> bind(填充第一列) -> bind (填充第二列……)-> execute -> clearBind(清除填充的数据) -> (处理第三条记录……)。Statement的prepare也是一个比较耗时的操作,在批量插入的时候没必要每次都去
调用
。这点对
性能
的提升没有使用事务来得明显,但一般也能提升几倍的
性能
。
《Android批量插入代码示例》
《IOS批量插入代码示例》
2、
数据库
升级
机制。
产品周期较长的软件开发过程中,难免要对
数据库
的表结构进行
修改
,比如
增加
表、字段、索引。一开始我是通过表名来进行区分,比如
用户
表是t_user,如果表结构需要
修改
就建立一张新表t_user_v2。在
数据库
打开的时候,检查各表是否存在,如果不存在则创建。后面开发安卓应用,发现Google的
解决方法
优雅多了:其可以为
数据库
定义一个版本号(举个栗子——19),之后如果
数据库
表结构需要
修改
,则
增加
这个版本号(
举个栗子——
增加
到20)。然后在打开
数据库
的时候会
自动
触发
void onUpgrade(
sql
iteDatabase db,int oldVersion[=19],int newVersion[=20] )
函数
,该
函数
有之前的版本号和目前的版本号,然后就可以执行相应的
数据库
升级
脚本了。
这套机制即使SDK没有
自带
,实现起来也很简单:就是在
数据库
初始化或者
升级
后找个地方保存版本记录(建议参考安卓用
sql
ite的user_version设置,详见:
http://sqlite.org/pragma.html#pragma_schema_version
,或者用SharedPreference、文本
文件
也是可以的。)。下次打开
数据库
的时候,对比保存的版本和当前的
数据库
版本。如果当前的
数据库
版本更高,则
调用
数据库
升级
函数
进行
升级
(记得之后更新版本记录为新的版本号)。我在IOS上就是使用这种方式来进行
数据库
升级
的。
3、
数据库
划分。
建议:如果没有事务、外键等需要,尽量把不同用途的表划分在多个
数据库
文件
中,而不是使用单一的
数据库
文件
。这么做最主要优点是有利于模块划分,避免其他所有模块都要访问同一个巨大务必的
数据库
模块。另外
性能
也会更好,比如
sql
ite并
不支持
多线程读写,所以访问同一个
数据库
的时候是要加同步锁的。使用多个
数据库
可以降低锁等待的可能。
4、理解rowid。
rowid是
sql
ite比较有特色的
功能
。rowid是
sql
ite为每条记录保存的一个隐藏列(select * from table 查看不了,需要的 select rowid,* from table),rowid从1开始递增。如果拿rowid作为外键来使用的时候,需要注意的一点是:“insert or replace into" 是会改变rowid的值。所以如果想更新记录,应该使用update语句,如果想忽略新值,应该用"insert or ignore into"语句。
最后但很重要的是:掌握
sql
的基本知识。
推荐一本书:《
sql
反模式》。
sql
是很简单,但用久了发现里面还是有不少门道。磨刀不误砍柴工,多看一本书,也许就可以少犯很多错。
转自:
上一篇:SQLite中使用CTE巧解多级分类的级联
下一篇:QT SQLITE使用事务批量插入数据
猜你在找的Sqlite相关文章
SQLite学习笔记
安装 在Windows上安装SQLite。 访问官网下载下Precompliled Binaries for Windows的两个压...
作者:前端之家 时间:2021-01-12
windows上如何安装Sqlite
一、安装 下载地址:http://www.sqlite.org/download.html 将Precompiled Binaries for Wi...
作者:前端之家 时间:2020-11-05
【Android数据存储】SQLite使用实例(附源码)
实例: 会员信息管理 功能:1.查看数据库 2.清空数据库 3.增加会员 4.删除会员 5.更新会员 ...
作者:前端之家 时间:2020-08-07
SQLite数据库管理
作者:前端之家 时间:2020-08-07
SQLite3常用命令
作者:前端之家 时间:2020-08-07
加密你的SQLite
关于SQLite SQLite是一个轻量的、跨平台的、开源的数据库引擎,它的在读写效率、消耗总量、...
作者:前端之家 时间:2020-08-07
SQLite这么娇小可爱,不多了解点都不行啊
在我眼里,MySQL和Oracle是这样的 而SQLite在是这样的 所以这么萌的数据库,我真的应该多了...
作者:前端之家 时间:2020-08-07
SQLite这么娇小可爱,不多了解点都不行啊
在我眼里,MySQL和Oracle是这样的 而SQLite在是这样的 所以这么萌的数据库,我真的应该多了...
作者:前端之家 时间:2020-08-07
SQLite 这么娇小可爱,不多了解点都不行啊
(点击上方蓝字,快速关注我们) 作者:空之境界 网址:http://supermao.cn/sqlitezhe-yao-...
作者:前端之家 时间:2020-08-07
SQLITE3 使用总结
SQLITE3 使用总结 投稿:hebedich 字体:[ 增加 减小] 类型:转载 时间:2014-08-19 Sql...
作者:前端之家 时间:2020-08-07
编程分类
MySQL
MsSQL
Oracle
Sqlite
Postgre SQL
Mariadb
MongoDB
NoSQL
HBase
JDBC
最新文章
• SQLite学习笔记
• windows上如何安装Sqlite
• 【Android数据存储】SQLit
• SQLite数据库管理
• SQLite3常用命令
• 加密你的SQLite
• 加密你的SQLite
• SQLite这么娇小可爱,不多
• SQLite这么娇小可爱,不多
• SQLite 这么娇小可爱,不多
热门标签
更多 ►
undo日志
persistent-c
mysql-error-
postal-code
sql-match-al
mysql-5.6
mysql-8.0
database-tri
安装路径
系统错误
data_dir
丢失文件
主从同步
sql_mode
数据库目录
匿名用户
character_se
ID归零
数据库位置
查询表
重复字段
查询字段
截断日志
SUSPECT
7391
Remote Serve
Linked Serve
玄学问题
登录不上
开启远程访问