停更了一天,I'm back again~~当我们需要操作大量的数据时,我们首先想到的当然是数据库,因为可以通过简单的语句实现数据的增删改查,在Android中,我们不使用SQL或者ORACLE,我们使用SQLite,因为它占用资源更少,而语句格式与SQL语句一样。

  首先,我们来在Android中实现数据库的创建与增删改查,引用数据库的类时,不再继承常用的Activity类,而是继承Android中的SQLiteOpenHelper,创建一个构造方法,四个参数分别是(Context context, String name, SQLiteDatabase.CursorFactory factory,int version),下面我们来分别解释一下这四个参数,context代表上下文环境,大多情况是上下文环境就是activity,name是数据库的名字,通常我们写成"xxx.db",这样方便知道我们创建的是一个数据库,cursor代表指针,在默认为null时,它表示初始为-1,然后依次指向数据库的每一行,我们可以利用cursor来扫描数据库,有条件的扫描就是查找,version代表版本号,只要设置大于等于1的值即可。在数据库类中一定要调用两个方法,即onCreate()与onUpdate()方法,传进来的参数都是数据库对象,它们分别在数据库被创建与数据库被更新时调用,在数据库被创建时创建表,直接调用执行数据库语句方法execSQL(String),代码如下:

package com.administrator.sqlite;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import android.provider.Settings;/** * Created by Administrator on 2016/7/22. */public class MyOpenHelper extends SQLiteOpenHelper {    //构造方法,new时会调用,cursor:封装数据库查询时返回的数据,初始为-1.依次向下读取下一行数据,null使用默认游标    public MyOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory,int version){        super(context,name,factory,version);    }    //数据库创建时,此方法会调用    //创建数据库的同时创建表    @Override    public void onCreate(SQLiteDatabase db) {        String sql="create table student(number char(4) primary key,name char(4),age char(1))";        db.execSQL(sql);    }   //数据库升级时,此方法会调用    @Override    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {        System.out.println("数据库被升级了");    }}

  下面我们用单元测试方法来实现一下数据库的增删改查,写在ApplicationTest中,首先我们定义一个MyOpenHelper的对象,此时我们在测试,没有任何前台任务,所以此时没有正在执行的Activity,Android为我们提供了getContext()方法,用来在没有上下文环境中为我们创建一个虚拟的上下文环境。接下来我们调用getReadableDatabase()来创建或打开一个数据库(如果没有,我们就创建一个数据库,如果有,我们就打开这个数据库),对数据的增删改操作,就是创建好一个数据库后执行相应的SQL语句,最后关闭数据库。代码如下:

package com.administrator.sqlite;import android.app.Application;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.test.ApplicationTestCase;/** * http://d.android.com/tools/testing/testing_android.html">Testing Fundamentals */public class ApplicationTest extends ApplicationTestCase {    public ApplicationTest() {        super(Application.class);    }    public void testInsert(){        MyOpenHelper moh=new MyOpenHelper(getContext(),"student.db",null,2);        SQLiteDatabase db=moh.getReadableDatabase();        db.execSQL("insert into student values(?,?,?)",new Object[]{"1234","Lily","19"});        db.execSQL("insert into student values(?,?,?)",new Object[]{"1235","Bob","20"});        db.execSQL("insert into student values(?,?,?)",new Object[]{"1236","Amy","18"});        db.execSQL("insert into student values(?,?,?)",new Object[]{"1237","Tom","21"});        db.execSQL("insert into student values(?,?,?)",new Object[]{"1238","Alice","18"});        db.execSQL("insert into student values(?,?,?)",new Object[]{"1239","Grace","20"});        db.execSQL("insert into student values(?,?,?)",new Object[]{"1240","Henry","23"});        db.execSQL("insert into student values(?,?,?)",new Object[]{"1241","David","40"});        db.execSQL("insert into student values(?,?,?)",new Object[]{"1242","Soada","17"});        db.close();    }    public void testDelete(){        MyOpenHelper moh=new MyOpenHelper(getContext(),"student.db",null,2);        SQLiteDatabase db=moh.getReadableDatabase();        db.execSQL("delete from student where number=?",new Object[]{1241});        db.close();    }    public void testUpdate(){        MyOpenHelper moh=new MyOpenHelper(getContext(),"student.db",null,2);        SQLiteDatabase db=moh.getReadableDatabase();        db.execSQL("update student set number=? where name=?",new Object[]{"1314","Soada"});        db.close();    }}

  对于对数据库的查找操作,我们需要利用游标实现按行扫描一遍数据库,并取出符合要求的数据,我们调用rawQuery方法,第一个参数为select语句;第二个参数为select语句中占位符参数的值,如果select语句没有使用占位符(也就是where语句),该参数可以设置为null,返回一个游标Cursor。扫描方法是:如果游标指向的下一行不为空,就获取每行每个属性的值,从而实现多行扫描并得到整个数据库的数据。我们还要强调一下getString()方法传递的参数是一个整型的索引值,它代表该属性的索引值,第一个为0,以此类推;但我们在不明确数据库结构的情况下,很难知道确切的值,因此我们通常调用getColumnIndex方法。代码如下:

 1 public void testSelect(){ 2         MyOpenHelper moh=new MyOpenHelper(getContext(),"student.db",null,2); 3         SQLiteDatabase db=moh.getReadableDatabase(); 4         Cursor cursor=db.rawQuery("select * from student",null); 5         while(cursor.moveToNext()){ 6             //获取下一行数据 7             String number = cursor.getString(cursor.getColumnIndex("number")); 8             String name = cursor.getString(cursor.getColumnIndex("name")); 9             String age = cursor.getString(cursor.getColumnIndex("age"));10             System.out.println(number+";"+name+";"+age);11             db.close();12         }

下面我们来逐一测试一下:

    增加若干条数据进入数据库student:

在Android中利用SQLite实现对数据的增删查改_第1张图片

删除一条记录:删除number为1241的记录

在Android中利用SQLite实现对数据的增删查改_第2张图片

修改一条记录:Soada的number改为1314

在Android中利用SQLite实现对数据的增删查改_第3张图片

  我们掌握了在Android中使用SQLite对数据的增删改查,下节我们要实现的是将数据库的每条记录依次显示到屏幕上。

 

转载于:https://www.cnblogs.com/soada/p/5699491.html

更多相关文章

  1. Android操作SQLite数据库(增、删、改、查、分页等)及ListView显
  2. 打造android ORM框架opendroid(五)——数据更新的实现
  3. Android Studio利用异步任务AsyncTask发送post请求获取json数据
  4. Android通过JSON数据格式和java服务后台进行数据交互
  5. Android (安卓数据的五种存储方式)
  6. 基于xml类型的压缩数据流的android获取天气的方法

随机推荐

  1. Android(安卓)AM命令行启动程序的方法
  2. android 状态栏移动到底部
  3. 网络时间同步
  4. Android中启动动画源码讲解
  5. 【翻译】(1)何为Android?(2012-06-30废弃)
  6. android设备添加F1-F12按键功能
  7. android之Tabhost深入讲解二
  8. Android动画播放的常用方式
  9. ContentProvider 翻译
  10. android获得屏幕高度和宽度