1、我们首先来看下整个项目

项目也是采用mvc的框架

package dB;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.widget.Toast; public class DbOpenHelper extends SQLiteOpenHelper
{ public DbOpenHelper(Context context) { super(context, "wy.db", null, 1);
} @Override
public void onCreate(SQLiteDatabase db)
{
db.execSQL("CREATE TABLE person(personid integer primary key autoincrement, name varchar(20), phone VARCHAR(12) NULL)"); } @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { }
}

操作表的接口类:

package service;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log; import java.util.ArrayList;
import java.util.List; import dB.DbOpenHelper;
import domain.Person; public class PersonService {
private DbOpenHelper dbOpenHelper; public PersonService(Context context) {
this.dbOpenHelper = new DbOpenHelper(context);
}
public void save(Person person){
SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
db.execSQL("insert into person(name, phone) values(?,?)",
new Object[]{person.getName(), person.getPhone()});
}
/**
* 删除记录
* @param name 记录ID
*/
public void delete(String name,String phone){
SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
db.execSQL("delete from person where name=? and phone=?", new Object[]{name,phone});
}
/**
* 更新记录
* @param person
*/
public void update(Person person,String name,String phone){
SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
db.execSQL("update person set name=?,phone=? where name=? and phone=?",
new Object[]{person.getName(), person.getPhone(),name,phone});
}
/**
* 查询记录
* @param name 记录ID
* @return
*/
public Person find(String name,String phone){
SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
Cursor cursor = db.rawQuery("select * from person where name=? and phone = ?", new String[]{name,phone});
if(cursor.moveToNext()){
int personid = cursor.getInt(cursor.getColumnIndex("personid"));
String name1 = cursor.getString(cursor.getColumnIndex("name"));
String phone1 = cursor.getString(cursor.getColumnIndex("phone"));
return new Person( name1, phone1);
}
cursor.close();
return null;
}
/**
* 分页获取记录
* @param offset 跳过前面多少条记录
* @param maxResult 每页获取多少条记录
* @return
*/
public List<Person> getScrollData(int offset, int maxResult){
List<Person> persons = new ArrayList<Person>();
SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
Cursor cursor = db.rawQuery("select * from person order by personid asc limit ?,?",
new String[]{String.valueOf(offset), String.valueOf(maxResult)});
while(cursor.moveToNext()){
int personid = cursor.getInt(cursor.getColumnIndex("personid")); /*这里也可以写成
* String name = cursor.getString(1);
String phone = cursor.getString(2);
默认的表自带的id字段为0 ,name为第一个字段所有为1 ,phone为第二个字段为2*/
String name = cursor.getString(cursor.getColumnIndex("name"));
String phone = cursor.getString(cursor.getColumnIndex("phone"));
persons.add(new Person( name, phone));
}
cursor.close();
return persons;
} /**
* 获取记录总数
* @return
*/
public long getCount(){
SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
Cursor cursor = db.rawQuery("select count(*) from person", null);
cursor.moveToFirst();
long result = cursor.getLong(0);//统计之后只有一个默认的字段,所以为0
cursor.close();
return result;
}
}

Person类对象是:

/**
* 文件名:Person.java
* 版权:版权所有 (C) 中国电科30所三部
* 描述:
* 修改人: wei.yuan
* 修改时间:2015/1/9
* 修改内容:新增
*/
package domain; /**
* 项目名称:SQLLite1
* 类描述:
* 创建人:wei.yuan
* 创建时间:2015/1/9 11:07
* 修改人:wei.yuan
* 修改时间:2015/1/9 11:07
* 修改备注:
* 版权:版权所有 (C) 中国电科30所三部
*/
public class Person
{ private String name;
private String phone; @Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", phone='" + phone + '\'' +
'}';
} public Person(String name, String phone) {
this.name = name;
this.phone = phone;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getPhone() {
return phone;
} public void setPhone(String phone) {
this.phone = phone;
}
}

我们可以编写一个测试工具类来对上面的功能进行测试:

Android的测试类必须继承AndroidTestCase,该类的方法必须以test开头

package testSQLLite;

import android.test.AndroidTestCase;
import android.util.Log;
import android.widget.Toast; import java.util.List; import dB.DbOpenHelper;
import domain.Person;
import service.PersonService; public class TestSQLLite extends AndroidTestCase {
final static String TAG ="weiyuan";
public void testCreateDb()
{
DbOpenHelper dbOpenHelper = new DbOpenHelper(getContext());
dbOpenHelper.getWritableDatabase();
Log.i(TAG,"数据库创建成功");
}
public void testSave() throws Exception{
PersonService service = new PersonService(this.getContext());
for(int i = 0;i<20;i++)
{
service.save(new Person("weiyuan"+i,"12345"+i));
}
Log.i(TAG,"数据保存成功");
} /*主要查找的是姓名和电话一起查找,只要满足了姓名和电话,才正确*/
public void testFind() throws Exception{
PersonService service = new PersonService(this.getContext());
Person person = service.find("chendong","456789");
Log.i(TAG, person.toString());
Log.i(TAG,"数据查找成功"); } /*删除某个记录*/
public void testdelete() throws Exception{
PersonService service = new PersonService(this.getContext());
service.delete("weiyuan1","123451");
Log.i(TAG,"数据删除成功"); }
/*给新某个记录*/
public void testupdate() throws Exception{
PersonService service = new PersonService(this.getContext());
service.update(new Person("chendong","456789"),"weiyuan2","123452");
Log.i(TAG, "数据修改成功"); }
/*获得分页的数据*/
public void testScrollData() throws Exception{
PersonService service = new PersonService(this.getContext());
List<Person> persons = service.getScrollData(0, 5);
for(Person person : persons){
Log.i(TAG, person.toString());
} } public void testCount() throws Exception{
PersonService service = new PersonService(this.getContext());
long result = service.getCount();
Log.i(TAG, result+"");
} }

黎活明8天快速掌握android视频教程--17_创建数据库与完成数据添删改查的更多相关文章

  1. 黎活明8天快速掌握android视频教程--21_监听ContentProvider中数据的变化

    采用ContentProvider除了可以让其他应用访问当前的app的数据之外,还有可以实现当app的数据发送变化的时候,通知注册了数据变化通知的调用者 其他所有的代码都和第20讲的一样,不同的地方看 ...

  2. 黎活明8天快速掌握android视频教程--20_采用ContentProvider对外共享数据

    1.内容提供者是让当前的app的数据可以让其他应用访问,其他应该可以通过内容提供者访问当前app的数据库 contentProvider的主要目的是提供一个开发的接口,让其他的应该能够访问当前应用的数 ...

  3. 黎活明8天快速掌握android视频教程--19_采用ListView实现数据列表显示

    1.首先整个程序也是采用mvc的框架 DbOpenHelper 类 package dB; import android.content.Context; import android.databas ...

  4. 黎活明8天快速掌握android视频教程--22_访问通信录中的联系人和添加联系人

    Android系统中联系人的通讯录的contentProvide是一个单独的apk,显示在界面的contact也是一个独立的apk,联系人apk通过contentProvide访问底层的数据库. 现在 ...

  5. 黎活明8天快速掌握android视频教程--25_网络通信之资讯客户端

    1 该项目的主要功能是:后台通过xml或者json格式返回后台的视频资讯,然后Android客户端界面显示出来 首先后台新建立一个java web后台 采用mvc的框架 所以的servlet都放在se ...

  6. 黎活明8天快速掌握android视频教程--24_网络通信之网页源码查看器

    1 该项目的主要功能就是从将后台的html网页在Android的界面上显示出来 后台就是建立一个java web工程在工程尚建立一个html或者jsp文件就可以了,这里主要看Android客户端的程序 ...

  7. 黎活明8天快速掌握android视频教程--23_网络通信之网络图片查看器

    1.首先新建立一个java web项目的工程.使用的是myeclipe开发软件 图片的下载路径是http://192.168.1.103:8080/lihuoming_23/3.png 当前手机和电脑 ...

  8. 黎活明8天快速掌握android视频教程--16_采用SharedPreferences保存用户偏好设置参数

    SharedPreferences保存的数据是xml格式,也是存在数据保存的下面四种权限: 我们来看看 我们来看看具体的业务操作类: /** * 文件名:SharedPrecences.java * ...

  9. 黎活明8天快速掌握android视频教程--15_采用Pull解析器解析和生成XML内容

    1.该项目主要有下面的两个作用 (1)将xml文件解析成对象的List对象,xml文件可以来自手机本地,也可以来自服务器返回的xml数据 (2)强list对象保存成xml文件,xml保存到手机的内存卡 ...

随机推荐

  1. 读-写锁 ReadWriteLock & 线程八锁

    读-写锁 ReadWriteLock: ①ReadWriteLock 维护了一对相关的锁,一个用于只读操作, 另一个用于写入操作. 只要没有 writer,读取锁可以由 多个 reader 线程同时保 ...

  2. python调用大漠插件教程02大漠插件绑定测试工具

    什么是大漠插件绑定测试工具? 这是大漠插件为了方便使用者调试绑定窗口的模式而设计的,因为有些程序不会接受一般的鼠键事件的响应模式,每个程序所需要的响应模式都不尽相同,所以这个工具可以使我们在绑定窗口时 ...

  3. Win2003远程桌面突然无法连接,有没有解决方法?

    在日常工作中,运维人员除了接触服务器监控工具外,最常用的应该就是远程桌面了吧.iis7远程桌面是一款绿色小巧的服务器管理工具,更加人性化,管理服务器更是不可测量. 可以管理1000台服务器的远程桌面: ...

  4. Rocket - util - Repeater

    https://mp.weixin.qq.com/s/xyEq3DgYuf2QuNjssv8pkA   简单介绍Repeater的实现.   ​​   1. 基本功能   A Repeater pas ...

  5. Java实现 蓝桥杯VIP 算法训练 非递归(暴力)

    试题 算法训练 非递归 问题描述 当x>1时,Hermite多项式的定义见第二版教材125页.用户输入x和n,试编写"非递归"函数,输出对应的Hermite多项式的值.其中x ...

  6. java实现滑动解锁

    滑动解锁是智能手机一项常用的功能.你需要在3x3的点阵上,从任意一个点开始,反复移动到一个尚未经过的"相邻"的点.这些划过的点所组成的有向折线,如果与预设的折线在图案.方向上都一致 ...

  7. Shell中傻傻分不清楚的TOP3

    Shell中傻傻分不清楚的TOP3 发布文章 近来小姐姐又犯憨憨错误,问组内小伙伴export命令不会持久化环境变量吗?反正我是问出口了..然后小伙伴就甩给了我一个<The Linux Comm ...

  8. HDFS ha 格式化报错:a shared edits dir must not be specified if HA is not enabled.

    错误内容: Formatting using clusterid: CID-19921335-620f-4e72-a056-899702613a6b2019-01-12 07:28:46,986 IN ...

  9. 温故知新-多线程-深入刨析volatile关键词

    文章目录 摘要 volatile的作用 volatile如何解决线程可见? CPU Cache CPU Cache & 主内存 缓存一致性协议 volatile如何解决指令重排序? volat ...

  10. N47-冯天驰-学习进度计划表

          马哥就业课程学习进度规划--N47-冯天驰 第一周 6.1-6.7                                                       8. 06- ...