Android开发之使用SQLite存储数据的方法分析
作者:青蛙小王子 发布时间:2022-09-17 12:13:12
标签:Android,SQLite
本文实例讲述了Android开发之使用SQLite存储数据的方法。分享给大家供大家参考,具体如下:
前面已经说到了几种文件的操作如sharedreference,sdcard.实际上Android还提供了另外的存储方式那就是sqlite。只要学习过数据库掌握这个也是没问题的。下面就和我一起来弄一下这个吧。
1. 安装一个SQLiteDeveloper,这个用来打开android生成的数据库。软件随便搜索就能找到,后面导出数据库只需打开软件点击“数据库“----->"注册数据库"后面的操作最好自己摸索吧
2. 编写一个业务类先生成一个数据库和数据库表,这个类如下所示
package org.lxh.service;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteQueryBuilder;
public class DBService extends SQLiteOpenHelper { //使用SQLiteOpenHelper创建数据库
public DBService(Context context) {
super(context, "mldn.db", null, 1);
}
public void onCreate(SQLiteDatabase db) {
String sql="create table student(userid Integer primary key autoincrement,username varchar(30))"; //生成数据库表的sql
db.execSQL(sql); //生成表
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
数据库和表准备好之后就可以做下一步的工作了
3. 编写增删改查的业务类
package org.lxh.service;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.lxh.vo.Student;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
public class StudentService {
private DBService db;
public StudentService(Context context){ //构造方法实例化DBService
db=new DBService(context);
}
public void savePerson(List<Student> stu){
String sql="insert into student(username) values(?)";
SQLiteDatabase database=db.getWritableDatabase(); //使用getWritableDatabase取得SQLiteDatabase
Iterator<Student> it=stu.iterator();
while(it.hasNext()){
Student student=it.next();
database.execSQL(sql, new Object[]{student.getUsername()}); //执行插入
}
}
public void delete(int userid){
String sql="delete from student where userid=?";
SQLiteDatabase database=db.getWritableDatabase();
database.execSQL(sql, new Object[]{String.valueOf(userid)});
}
public List<Student> fiandAll(){
List<Student> all=new ArrayList<Student>();
String sql="select * from student";
SQLiteDatabase database=db.getReadableDatabase(); //使用getReadableDatabase取得SQLiteDatabase
Cursor cursor=database.rawQuery(sql, null); //得到游标,类似resultset
Student stu;
while(cursor.moveToNext()){ //移动游标
int id=cursor.getInt(cursor.getColumnIndex("userid"));
String name=cursor.getString(cursor.getColumnIndex("username"));
stu=new Student();
stu.setUserid(id);
stu.setUsername(name);
all.add(stu);
}
cursor.close(); //关闭游标
return all;
}
public int getCount(){
String sql="select count(*) from student";
SQLiteDatabase database=db.getReadableDatabase();
Cursor cursor=database.rawQuery(sql, null);
cursor.moveToFirst();
return cursor.getInt(0);
}
}
需要注意的是getReadableDatabase和getWritableDatabase的用法,只是单纯的数据查询就使用getReadableDatabase,对数据进行修改操作就使用后者。另外需要注意sqlite的数据类型是没有任何作用的,只是为了程序员的互相合作。
4. 编写android的Junit
package org.lxh.db;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.lxh.service.DBService;
import org.lxh.service.StudentService;
import org.lxh.vo.Student;
import android.test.AndroidTestCase;
import android.util.Log;
public class Test extends AndroidTestCase{
public void testSave(){
DBService db=new DBService(this.getContext());
db.getWritableDatabase();
}
public void testSaveStudent(){
StudentService service=new StudentService(this.getContext());
Student stu=null;
List<Student> stus=new ArrayList<Student>();
for(int i=0;i<10;i++){
stu = new Student();
stu.setUsername("陈亚峰"+i);
stus.add(stu);
}
service.savePerson(stus);
}
public void delete(){
StudentService service=new StudentService(this.getContext());
service.delete(11);
}
public void findAll(){
StudentService service=new StudentService(this.getContext());
List<Student> all=service.fiandAll();
Iterator<Student> it=all.iterator();
while(it.hasNext()){
Student stu=it.next();
Log.i("Test", "id:"+stu.getUserid()+","+"username"+stu.getUsername());
}
}
public void findRows(){
StudentService service=new StudentService(this.getContext());
Log.i("Test",String.valueOf(service.getCount()));
}
}
执行之后生成了数据,id为11的记录已经被删除了
希望本文所述对大家Android程序设计有所帮助。


猜你喜欢
- 思路如下:创建一个类,通过extends使其继承窗体类JFrame;创建一个JFrame对象,使用JFrame类的setVisible()方
- Java 8 , Lambda + foreach 语法糖, 写起来非常的 cleanpublic static void main(Str
- 配置文件中设置通常在公司级别的项目中,我们可能会写多个application- dev/prod.yml ,然后我们通常会在applicat
- MQ:消息队列/消息中间件/消息代理,产品有很多,ActiveMQ RabbitMQ RocketMQ Kafka1、Stream解决的痛点
- RestTemplate 请求url中包含百分号 会被转义成25最初使用RestTemplate 进行远程调用方法如下:private St
- 本文实例讲述了C#实现读写ini文件类。分享给大家供大家参考。具体如下:这个C#类封装了对INI配置文件进行操作所需的各种函数,包括读取键值
- 这篇文章主要介绍了Java代码块与代码加载顺序原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋
- 一、什么是命令模式命令模式是一个高内聚的模式,其定义为:将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请 求排队或者记录
- 我已经很精简了,两篇(Spring Boot启动过程(一)、spring Boot启动过程(二))依然没写完,接着来。refreshCont
- 前言在开发 Flutter 应用程序时,我们需要有一个组件来管理全局设置,包括主题、导航和路由。这就是 MaterialApp 的用途。作为
- 在多线程对一个整数进行自增操作时,需要用synchronized进行同步。然而,如果synchronized的对象选取的不合适的话,就无法实
- 使用背景项目中用户频繁访问数据库会导致程序的卡顿,甚至堵塞。使用缓存可以有效的降低用户访问数据库的频次,有效的减少并发的压力。保护后端真实的
- 在日常工作中,我们有时会需要修改字体的颜色来突出文本重点,让读者更容易抓住文章要点。在今天这篇文章中,我将为大家介绍如何以编程方式,在Wor
- 本文主要介绍了C# 泛型List排序的实现,分享给大家,具体如下:代码using System;using System.Collectio
- 本文实例讲述了Java编程实现提取文章中关键字的方法。分享给大家供大家参考,具体如下:实现代码:/** * 相关的jar包 * lucene
- 上一篇:Android 10 App启动分析之进程创建篇(一)上一篇文章,我们探讨了App启动过程中进程创建及初始化的流程,这篇文章我们接着
- 本文实例讲述了Android亮屏和熄屏控制实现方法。分享给大家供大家参考,具体如下:一、概述我们的Android应用程序很多需要和亮屏和熄屏
- 今天介绍一个实用的小知识点,如何将List转为Map<Object, List<Object>>1. 基本写法最开始
- 谷歌官方推出了一种侧滑菜单的实现方式(抽屉效果),即 DrawerLayout,这个类是在Support Library里的,需要加上and
- 1) 要及时回收Bitmap的内存Bitmap类有一个方法recycle(),从方法名可以看出意思是回收。这里就有疑问了,Android系统