android小功能实现之SQLite数据库的基本操作



创建一个Android工程

一 新建数据库

1 新建一个类DBOpenHelper

内容如下:

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DBOpenHelper extends SQLiteOpenHelper {
    public DBOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        // 数据库保持位置<包>/databases
        super(context, name, factory, version);
    }

    @Override
    // 数据库第一次被创建时调用
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE person(id integer primary key autoincrement, name varchar(20))");
    }

    @Override
    // 数据库文件的版本号发生变更时调用
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("ALTER TABLE person ADD phone VARCHAR(12) NULL");
    }
}

onCreate函数在数据库创建时调用;

onUpgrade在数据库版本号version发生变化时调用。

2 测试

修改MainActivity.java代码如下:

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        int version = 1;
        DBOpenHelper dbOpenHelper = new DBOpenHelper(getApplicationContext(), "test.db", null, version);
        dbOpenHelper.getWritableDatabase();
    }

此时在data文件夹中可以看到test.db文件如图:

打开可以看到:

打开person:

修改version的值:

int version = 2;

再次查看test.db的内容:

二 数据库的基本操作

1 新建一个类Person类

用于保存对象数据,内容如下:

public class Person {
    private Integer id;
    private String name;
    private String phone;

    public Person(){

    }

    public Person(String name, String phone) {
        this.name = name;
        this.phone = phone;
    }

    public Person(int id, String name, String phone) {
        this.id = id;
        this.name = name;
        this.phone = phone;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    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;
    }

    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", phone='" + phone + '\'' +
                '}';
    }
}

2 新建一个类PersonService类

用于对数据进行操作,内容如下:

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import java.util.ArrayList;
import java.util.List;

public class PersonService {
    private DBOpenHelper dbOpenHelper;

    public PersonService(Context context) {
        int version = 2;
        this.dbOpenHelper = new DBOpenHelper(context, "test.db", null, version);
    }

    // 增
    public void save(Person person){
        SQLiteDatabase db = this.dbOpenHelper.getWritableDatabase();
        db.execSQL("insert into person(name, phone) values(?, ?)", new Object[]{person.getName(), person.getPhone()});
    }

    // 删
    public void delete(Integer id){
        SQLiteDatabase db = this.dbOpenHelper.getWritableDatabase();
        db.execSQL("delete from person where id=?", new Object[]{id});
    }

    // 改
    public void update(Person person){
        SQLiteDatabase db = this.dbOpenHelper.getWritableDatabase();
        db.execSQL("update person set name=?,phone=? where id=?", new Object[]{person.getName(), person.getPhone(), person.getId()});
    }

    // 查
    public  Person find(Integer id){
        SQLiteDatabase db = this.dbOpenHelper.getReadableDatabase();
        Cursor cursor = db.rawQuery("select * from person where id=?", new String[]{id.toString()});
        if (cursor.moveToFirst()){
            int personId = cursor.getInt(cursor.getColumnIndex("id"));
            String name = cursor.getString(cursor.getColumnIndex("name"));
            String phone = cursor.getString(cursor.getColumnIndex("phone"));
            return new Person(personId, name, phone);
        }
        cursor.close();
        return null;
    }

    // 分页获取记录,跳过前offset条记录,查找maxResult条记录
    public List<Person> getScrollData(int offset, int maxResult){
        SQLiteDatabase db = this.dbOpenHelper.getReadableDatabase();
        Cursor cursor = db.rawQuery("select * from person order by id asc limit ?,?",
                new String[]{String.valueOf(offset), String.valueOf(maxResult)});
        List<Person> persons = new ArrayList<Person>();
        while (cursor.moveToNext()){
            int personId = cursor.getInt(cursor.getColumnIndex("id"));
            String name = cursor.getString(cursor.getColumnIndex("name"));
            String phone = cursor.getString(cursor.getColumnIndex("phone"));
            persons.add(new Person(personId, name, phone));
        }
        cursor.close();
        return  persons;
    }

    // 获取记录条数
    public long getCount(){
        SQLiteDatabase db = this.dbOpenHelper.getReadableDatabase();
        Cursor cursor = db.rawQuery("select count(*) from person",null);
        cursor.moveToFirst();
        long res = cursor.getLong(0);
        cursor.close();
        return res;
    }
}

3 测试添加数据

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 创建数据库
        int version = 2;
        DBOpenHelper dbOpenHelper = new DBOpenHelper(getApplicationContext(), "test.db", null, version);
        dbOpenHelper.getWritableDatabase();
        // 数据库基本操作
        PersonService service = new PersonService(getApplicationContext());
        Person person = new Person("寒风", "1596262XXXX");
        service.save(person);
    }

再次查看test.db的内容:

4 测试查找数据

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 创建数据库
        int version = 2;
        DBOpenHelper dbOpenHelper = new DBOpenHelper(getApplicationContext(), "test.db", null, version);
        dbOpenHelper.getWritableDatabase();
        // 数据库基本操作
        PersonService service = new PersonService(getApplicationContext());
        /*
        Person person = new Person("寒风", "1596262XXXX");
        service.save(person);
        */
        Person p = service.find(1);
        Log.i("PersonService", p.toString());
    }

注释掉之前添加数据的代码,讲查询出的数据打印到logcat,结果如下:

5 测试更新数据

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 创建数据库
        int version = 2;
        DBOpenHelper dbOpenHelper = new DBOpenHelper(getApplicationContext(), "test.db", null, version);
        dbOpenHelper.getWritableDatabase();
        // 数据库基本操作
        PersonService service = new PersonService(getApplicationContext());
        /*
        Person person = new Person("寒风", "1596262XXXX");
        service.save(person);
        */

        Person p = service.find(1);
        p.setName("丿寒灬风丨");
        service.update(p);
        Person p1 = service.find(1);
        Log.i("PersonService", p1.toString());
    }

修改了名称,并更新到数据库,再次执行查询结果如图:

注意,前一条是上一次输出的结果。

5 测试获取记录条数

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 创建数据库
        int version = 2;
        DBOpenHelper dbOpenHelper = new DBOpenHelper(getApplicationContext(), "test.db", null, version);
        dbOpenHelper.getWritableDatabase();
        // 数据库基本操作
        PersonService service = new PersonService(getApplicationContext());
        /*
        Person person = new Person("寒风", "1596262XXXX");
        service.save(person);
        */
        /*
        Person p = service.find(1);
        p.setName("丿寒灬风丨");
        service.update(p);
        Log.i("PersonService", p.toString());
        */
        Log.i("PersonService","count:"+ String.valueOf(service.getCount()));
    }

结果如图:

5 测试分页方法

5.1 添加多条测试数据

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 创建数据库
        int version = 2;
        DBOpenHelper dbOpenHelper = new DBOpenHelper(getApplicationContext(), "test.db", null, version);
        dbOpenHelper.getWritableDatabase();
        // 数据库基本操作
        PersonService service = new PersonService(getApplicationContext());
        for (int i=0; i<20;++i) {
            Person person = new Person("寒风", "1596262XXX"+i);
            service.save(person);
        }
        /*
        Person p = service.find(1);
        p.setName("丿寒灬风丨");
        service.update(p);
        Log.i("PersonService", p.toString());
        */

        // Log.i("PersonService","count:"+ String.valueOf(service.getCount()));
    }

查看test.db的内容:

5.2 测试删除方法

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 创建数据库
        int version = 2;
        DBOpenHelper dbOpenHelper = new DBOpenHelper(getApplicationContext(), "test.db", null, version);
        dbOpenHelper.getWritableDatabase();
        // 数据库基本操作
        PersonService service = new PersonService(getApplicationContext());
        /*
        for (int i=0; i<20;++i) {
            Person person = new Person("寒风", "1596262XXX"+i);
            service.save(person);
        }
        */
        /*
        Person p = service.find(1);
        p.setName("丿寒灬风丨");
        service.update(p);
        Log.i("PersonService", p.toString());
        */

        // Log.i("PersonService","count:"+ String.valueOf(service.getCount()));

        List<Person> persons = service.getScrollData(0, 5);
        for(Person person:persons){
            Log.i("PersonService", person.toString());
        }
        Log.i("PersonService","-------------------------");
        List<Person> persons1 = service.getScrollData(5, 5);
        for(Person person:persons1){
            Log.i("PersonService", person.toString());
        }
    }

结果如图:

6 测试删除方法

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 创建数据库
        int version = 2;
        DBOpenHelper dbOpenHelper = new DBOpenHelper(getApplicationContext(), "test.db", null, version);
        dbOpenHelper.getWritableDatabase();
        // 数据库基本操作
        PersonService service = new PersonService(getApplicationContext());
        /*
        for (int i=0; i<20;++i) {
            Person person = new Person("寒风", "1596262XXX"+i);
            service.save(person);
        }
        */
        /*
        Person p = service.find(1);
        p.setName("丿寒灬风丨");
        service.update(p);
        Log.i("PersonService", p.toString());
        */

        // Log.i("PersonService","count:"+ String.valueOf(service.getCount()));

        /*
        List<Person> persons = service.getScrollData(0, 5);
        for(Person person:persons){
            Log.i("PersonService", person.toString());
        }
        Log.i("PersonService","-------------------------");
        List<Person> persons1 = service.getScrollData(5, 5);
        for(Person person:persons1){
            Log.i("PersonService", person.toString());
        }
        */
        service.delete(1);
    }

查看test.db的内容:

三 使用封装方法实现

SQLiteDatabase类中对SQL语句做了简单的封装,每个方法对于如下:

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import java.util.ArrayList;
import java.util.List;

public class PersonService {
    private DBOpenHelper dbOpenHelper;

    public PersonService(Context context) {
        int version = 2;
        this.dbOpenHelper = new DBOpenHelper(context, "test.db", null, version);
    }

    // 增
    public void save(Person person){
        SQLiteDatabase db = this.dbOpenHelper.getWritableDatabase();
        db.execSQL("insert into person(name, phone) values(?, ?)", new Object[]{person.getName(), person.getPhone()});
    }

    public void save1(Person person){
        SQLiteDatabase db = this.dbOpenHelper.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("name", person.getName());
        values.put("phone", person.getPhone());
        db.insert("person",null, values);
    }

    // 删
    public void delete(Integer id){
        SQLiteDatabase db = this.dbOpenHelper.getWritableDatabase();
        db.execSQL("delete from person where id=?", new Object[]{id});
    }
    public void delete1(Integer id){
        SQLiteDatabase db = this.dbOpenHelper.getWritableDatabase();
        db.delete("person", "id=?",new String[]{id.toString()});
    }

    // 改
    public void update(Person person){
        SQLiteDatabase db = this.dbOpenHelper.getWritableDatabase();
        db.execSQL("update person set name=?,phone=? where id=?", new Object[]{person.getName(), person.getPhone(), person.getId()});
    }

    public void update1(Person person) {
        SQLiteDatabase db = this.dbOpenHelper.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("name", person.getName());
        values.put("phone", person.getPhone());
        db.update("person",values,"id=?", new String[]{person.getId().toString()});
    }

    // 查
    public  Person find(Integer id){
        SQLiteDatabase db = this.dbOpenHelper.getReadableDatabase();
        Cursor cursor = db.rawQuery("select * from person where id=?", new String[]{id.toString()});
        if (cursor.moveToFirst()){
            int personId = cursor.getInt(cursor.getColumnIndex("id"));
            String name = cursor.getString(cursor.getColumnIndex("name"));
            String phone = cursor.getString(cursor.getColumnIndex("phone"));
            return new Person(personId, name, phone);
        }
        cursor.close();
        return null;
    }

    public  Person find1(Integer id) {
        SQLiteDatabase db = this.dbOpenHelper.getReadableDatabase();
        //db.query("person", null, "id=?", new String[]{id.toString()},null, null,null);
        Cursor cursor = db.query("person", new String[]{"id","name","phone"}, "id=?", new String[]{id.toString()},null, null,null);
        if (cursor.moveToFirst()){
            int personId = cursor.getInt(cursor.getColumnIndex("id"));
            String name = cursor.getString(cursor.getColumnIndex("name"));
            String phone = cursor.getString(cursor.getColumnIndex("phone"));
            return new Person(personId, name, phone);
        }
        cursor.close();
        return null;
    }

    // 分页获取记录
    public List<Person> getScrollData(int offset, int maxResult){
        SQLiteDatabase db = this.dbOpenHelper.getReadableDatabase();
        Cursor cursor = db.rawQuery("select * from person order by id asc limit ?,?",
                new String[]{String.valueOf(offset), String.valueOf(maxResult)});
        List<Person> persons = new ArrayList<Person>();
        while (cursor.moveToNext()){
            int personId = cursor.getInt(cursor.getColumnIndex("id"));
            String name = cursor.getString(cursor.getColumnIndex("name"));
            String phone = cursor.getString(cursor.getColumnIndex("phone"));
            persons.add(new Person(personId, name, phone));
        }
        cursor.close();
        return  persons;
    }

    public List<Person> getScrollData1(int offset, int maxResult){
        SQLiteDatabase db = this.dbOpenHelper.getReadableDatabase();
        Cursor cursor = db.query("person", null, null,null,null,null,"id asc", offset+","+maxResult);
                new String[]{String.valueOf(offset), String.valueOf(maxResult)});
        List<Person> persons = new ArrayList<Person>();
        while (cursor.moveToNext()){
            int personId = cursor.getInt(cursor.getColumnIndex("id"));
            String name = cursor.getString(cursor.getColumnIndex("name"));
            String phone = cursor.getString(cursor.getColumnIndex("phone"));
            persons.add(new Person(personId, name, phone));
        }
        cursor.close();
        return  persons;
    }

    // 获取记录条数
    public long getCount(){
        SQLiteDatabase db = this.dbOpenHelper.getReadableDatabase();
        Cursor cursor = db.rawQuery("select count(*) from person",null);
        cursor.moveToFirst();
        long res = cursor.getLong(0);
        cursor.close();
        return res;
    }
    public long getCount1(){
        SQLiteDatabase db = this.dbOpenHelper.getReadableDatabase();
        Cursor cursor = db.query("person", new String[]{"count(*)"},null,null,null,null,null);
        cursor.moveToFirst();
        long res = cursor.getLong(0);
        cursor.close();
        return res;
    }
}
时间: 2024-10-03 21:53:17

android小功能实现之SQLite数据库的基本操作的相关文章

在 Android 应用程序中使用 SQLite 数据库以及怎么用

part one : android SQLite 简单介绍 SQLite 介绍 SQLite 一个非常流行的嵌入式数据库.它支持 SQL 语言,而且仅仅利用非常少的内存就有非常好的性能.此外它还是开源的,不论什么人都能够使用它.很多开源项目((Mozilla, PHP, Python)都使用了 SQLite. SQLite 由下面几个组件组成:SQL 编译器.内核.后端以及附件.SQLite 通过利用虚拟机和虚拟数据库引擎(VDBE).使调试.改动和扩展 SQLite 的内核变得更加方便. 图

在Android中查看和管理sqlite数据库

http://www.cnblogs.com/walkingp/archive/2011/03/28/1997437.html 在Android中查看和管理sqlite数据库 在Android中可以使用Eclipse插件DDMS来查看,也可以使用Android工具包中的adb工具来查看.android项目中的sqlite数据库位于/data/data/项目包/databases中. 使用DDMS导出sqlite数据库. 1.首先打开android项目的调试模式,然后找到显示DDMS: 选择DDM

Android菜鸟成长记11 -- sqlite数据库的设计和升降级

Google为Andriod的较大的数据处理提供了SQLite,他在数据存储.管理.维护等各方面都相当出色,功能也非常的强大.SQLite具备下列特点: 1.轻量级 使用 SQLite 只需要带一个动态库,就可以享受它的全部功能,而且那个动态库的尺寸想当小. 2.独立性 SQLite 数据库的核心引擎不需要依赖第三方软件,也不需要所谓的"安装". 3.隔离性 SQLite 数据库中所有的信息(比如表.视图.触发器等)都包含在一个文件夹内,方便管理和维护. 4.跨平台 SQLite 目前

Android中多表的SQLite数据库(译)

原文: Android SQLite Database with Multiple Tables 在上一篇教程Android SQLite Database Tutorial中,解释了如何在你的Android应用中使用SQLite数据库.但它只涵盖了你的数据库中只有一个表的情景.有很多人询问当数据库中有多个表时如何处理. 以下解释了当有多个表存在时如何处理SQLite数据库. 用例: Todo应用 为了便于理解,我在这一教程中用了一个真实的用例,一个TODO应用的数据库方案.本文不会涵盖如何设计

Android批量插入数据到SQLite数据库

Android中在sqlite插入数据的时候默认一条语句就是一个事务,因此如果存在上万条数据插入的话,那就需要执行上万次插入操作,操作速度可想而知.因此在Android中插入数据时,使用批量插入的方式可以大大提高插入速度. 有时需要把一些数据内置到应用中,常用的有以下2种方式:其一直接拷贝制作好的SQLite数据库文件,其二是使用系统提供的数据库,然后把数据批量插入.我更倾向于使用第二种方式:使用系统创建的数据库,然后批量插入数据.批量插入数据也有很多方法,那么那种方法更快呢,下面通过一个dem

Android内部自带的SQLite数据库操作dos命令

1:什么叫做SQLite数据库 Android系统内核是Linux系统,Android系统很特殊,他自带了一个SQLite数据库,轻量型的一款嵌入式的数据库 它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了.操作简单,你如果是之前学过其他的数据库的基础的话, 操作起来可以说是举手之劳. 2:这个SQLite数据库的数据类型有哪些. Integer  整型  有符号整数 -1,0,1,2,3- Real 浮点型以 8字节 IEEE 浮点数存储. Text. 值是文本字符串,使用数据

Android 批量插入数据到SQLite数据库

Android中在sqlite插入数据的时候默认一条语句就是一个事务,因此如果存在上万条数据插入的话,那就需要执行上万次插入操作,操作速度可想而知.因此在Android中插入数据时,使用批量插入的方式可以大大提高插入速度. 有时需要把一些数据内置到应用中,常用的有以下2种方式:其一直接拷贝制作好的SQLite数据库文件,其二是使用系统提供的数据库,然后把数据批量插入.我更倾向于使用第二种方式:使用系统创建的数据库,然后批量插入数据.批量插入数据也有很多方法,那么那种方法更快呢,下面通过一个dem

Android 存储学习之SQLite数据库的基本操作

本节学习SQLite数据库,SQLite是Android内置的一个简单的轻量级的数据库.关于SQLite的简介我这里不做过多的介绍. 既然我们要学习数据库的基本操纵,那就离不开,数据库的创建,增删改查等操作. 再学习数据库的相关操作前,我先给大家介绍一个类:SQLiteOpenHelper.SQLiteOpenHelper是Android系统为方便程序的开发引入的一个对数据库管理的工具类.可用于关于数据库的创建和版本更新.一般的用法是创建SQLiteOpenHelper的子类,并实现它的OnCr

小波Linux安卓Sqlite数据库实现用户登录注册,通俗易懂!

看了很多别人写的安卓SQlite数据的操作代码,都是浮云,瞎弄!一点也不通俗易懂,我觉得我写的不错,而且安卓项目也用上了,所以在博客园里保存分享一下! 一SQLiteHelper类是自动重载增删改查函数的,另外一个是自己定义的类,用Context传值.我用的是Fragment,用Activity的话吧getActivity()去掉! 实现了用户登录注册的功能! http://www.cnblogs.com/xiaobo-Linux/ (小波)赵存档QQ463431476 public class