位置: 编程技术 - 正文

SQLite之SQLiteStatement

编辑:rootadmin

推荐整理分享SQLite之SQLiteStatement,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

平常在做Android数据库操作时,都是用的execSQL之个方法. 今天偶然发现了SQLiteStatement这个类.让我想起了在做Java Web开发写JDBC的代码时Prestatement这个类.Prestatement不仅提高了效率,也解决了SQL注入的问题.那在Android中的SQLiteStatement,是否也会提高一些效率呢?

于是写了一个简单的测试,比较execSQL和SQLiteStatement的executeInsert方法插入条数据所需要的时间.都没有使用事物.

新建一个数据库和users表:

?publicclass DBHelper extendsSQLiteOpenHelper { privatestatic final String DB_NAME = "userdb"; privatestatic final int DB_VERSION = 1; publicDBHelper(Context context) { super(context, DB_NAME, null, DB_VERSION); } @Override publicvoid onCreate(SQLiteDatabase db) { StringBuffer sql = newStringBuffer(); sql.append("create table users"); sql.append("(_id int PRIMARY KEY,name varchar,gender int,age int,phoneNumber varchar,address varchar)"); db.execSQL(sql.toString()); } @Override publicvoid onUpgrade(SQLiteDatabase db, intoldVersion, intnewVersion) { } }然后分别使用SQLiteDatabase 的execSQL方法和SQLiteStatement的executeInsert方法进入插入, 比较执行所需要的时间:

SQLite之SQLiteStatement

?publicclass UserDao { privateDBHelper dbHelper; privateSQLiteDatabase db; privateStringBuffer sql_insert; privateList<User> users; publicUserDao(Context context){ this.dbHelper = newDBHelper(context); this.db = dbHelper.getWritableDatabase(); sql_insert = newStringBuffer(); sql_insert.append("INSERT INTO users(name,gender,age,phoneNumber,address) "); sql_insert.append(" VALUES( ?, ?, ?, ?, ?)"); users = newArrayList<User>(); //测试数据 for(inti = 0;i<;i&#;&#;){ User user = newUser(); user.setId(i); user.setName("name"&#;i); user.setGender(0); user.setAge(user.getRandomAge()); user.setPhoneNumber(""); user.setAddress("GuangDong ShenZhen No."&#;i); users.add(user); } } /** * 使用SQLiteDatabase 的execSQL方法插入数据 * @return 返回执行所需要的时间 */ publiclong insertexecSQL() { longstart=System.currentTimeMillis(); for(User user:users){ Object[] bindArgs = {user.getName(),user.getGender(),user.getAge(),user.getPhoneNumber(),user.getAddress()}; db.execSQL(sql_insert.toString(),bindArgs); } longend = System.currentTimeMillis(); returnend - start; } /** * 使用SQLiteStatement的executeInsert方法插入数据 * @return 返回执行所需要的时间 */ publiclong insertStatement() { longstart = System.currentTimeMillis(); for(User user:users){ SQLiteStatement statement= db.compileStatement(sql_insert.toString()); statement.bindString(1, user.getName()); statement.bindLong(2, user.getGender()); statement.bindLong(3, user.getAge()); statement.bindString(4, user.getPhoneNumber()); statement.bindString(5, user.getAddress()); statement.executeInsert(); } longend = System.currentTimeMillis(); returnend - start; }}

界面方面就两个按钮,分别调用不同的插入方法, 并将执行所需的时间显示在Button上.

?publicclass MainActivity extendsActivity { privateButton btn1; privateButton btn2; @Override protectedvoid onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); finalUserDao dao = newUserDao(this); btn1 = (Button) findViewById(R.id.btn1); btn2 = (Button) findViewById(R.id.btn2); btn1.setOnClickListener(newOnClickListener() { @Override publicvoid onClick(View v) { btn1.setText(String.valueOf(dao.insertexecSQL())); } }); btn2.setOnClickListener(newOnClickListener() { @Override publicvoid onClick(View v) { btn2.setText(String.valueOf(dao.insertStatement())); } }); } }

通过几次比较发现,插入条数据,使用SQLiteStatement的executeInsert方法一般比使用SQLiteDatabase 的execSQL方法快5秒左右.这个差距还是很大的.

需要说明的是,上面的两个方法我们都没有开启事物.在进行这样的批量操作时,开启事物肯定会很大程度上提高效率.

db.beginTransaction();xxxx….db.setTransactionSuccessful();db.endTransaction();

还有一个需要注意的问题是,在批量插入条数据的时候,并没用使用异步类或新的线程.我发现界面明显会出现停顿的现象.如果插入更大数量的数据时,会直接停止响应.

所以,在进行数据操作的时候, 如果数据量较大, 建议使用异步类或开启新的线程.

Android之Service 1、Service的种类按运行地点分类:类别区别优点缺点应用本地服务(Local)该服务依附在主进程上,服务依附在主进程上而不是独立的进程,这样在一定

Android之Notification 先来一段代码[java]viewplaincopymNotificationManager=(NotificationManager)context.getSystemService(context.NOTIFICATION_SERVICE);Intentintent=newIntent(context,MainActivity.class);intent.setFlags

android定义theme和style 方便地定义显示效果,不用每次定义组件时重复定义属性,在Android系统中引入了主题Theme和样式Style的概念。Theme是针对窗体级别的,而Style是针对组件

标签: SQLite之SQLiteStatement

本文链接地址:https://www.jiuchutong.com/biancheng/385167.html 转载请保留说明!

上一篇:Android之ContentProvider

下一篇:Android之Service

  • 生产车间领用材料,用于产品生产
  • 企业可以采用多品牌战略吗
  • 企业融资租赁是什么意思
  • 个体工商户化妆品经营范围
  • 外币报表折算差额在会计报表中应作为
  • 个人出租住房缴纳个税可以扣除房产税吗
  • 商用住房出租需要交什么税?
  • 医疗器械销售初次拜访话术
  • 个税怎么计算扣多少
  • 股权转让受让人违约
  • 苗木免税发票可以认证增值税吗
  • 增值税专票盖章正确位置
  • 信托公司如何投资
  • 物业收租金必须要发票吗
  • 所有者权益与所有者权益合计
  • 个人所得税的速算扣除数是什么意思
  • 公司转账给法人最多可以转多少
  • 研发费用直接投入占比过高税务预警
  • 所得税费用什么时候结转
  • 企业把活承包给个人,和企业有劳动关系吗?
  • 如何下载网页?
  • 代收代缴水电费商家不缴可以停电吗
  • 简易征收做账
  • 公司给员工的油费补贴以什么为依据入账
  • windows 11任务栏没有网络图标
  • 电脑怎样进入cmos设置
  • 如何把itunes的音乐导入ipod
  • 投资收益怎么算例题
  • php数组函数输出《咏雪》里有多少"片"字
  • 工业企业会计核算的特点
  • 发票与付款金额不一致违法吗
  • 在建工程减值准备
  • php文件乱码怎么办
  • 所得税返还计入什么科目
  • 如何在你的电脑上截图
  • 小企业会计准则财务报表至少包括
  • php变量使用之前需要定义变量类型
  • php递归算法经典题目
  • 进项税额转出是好事还是坏事
  • 税务滞纳金计入什么会计科目
  • 外账是代理记账吗
  • 购买办公用品进项税额可以抵扣吗
  • python PyQt如何使用资源
  • python中如何创建字典
  • 向境外机构支付的服务费税收政策
  • 营改增之前的工程还能开票吗
  • 长期待摊费用是非流动资产吗
  • 物业公司一般纳税人简易征收
  • 劳务派遣工资可以税前扣除吗
  • 固定资产是指的什么
  • 股票增值权个人可以买吗
  • 汇兑损益计入营业外收入吗
  • 新成立的公司如何注销
  • 工资表的重要性
  • 融资租赁的服务费是什么票
  • 农产品计算抵扣税率 最新
  • 赠送购物券的会计处理
  • 建筑业异地预缴个税税率
  • 费用设置的明细科目
  • sql必知必会第四版
  • freebsd使用
  • 安装fedora进入不到安装界面
  • 2019谷歌浏览器
  • linux 中断 处理
  • win7系统ie浏览器打不开
  • win7打开游戏显示已停止工作
  • win7系统快速关机快捷键
  • 第三人称控制器在平面上老掉
  • unity shader cull off
  • Unity3D游戏开发毕业论文
  • node js入门
  • javascript制作小程序
  • Python对象转列表
  • 河南工商年检网上申报
  • 如何查询企业税收情况
  • 企业代理申报还用自己申报吗
  • 青海国税局领导班子
  • 在深圳,企业房贷怎么办
  • 如何开具红字发票明细
  • 陕西地税局电话号码
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设