数据的访问与存储

Android有五种数据存储方式:文件存储、SharedPreferences、SQLite数据库、ContentProvider、网络存储。

文件存储: 通过I/O流读写文件,跟Java是一样的,一般用来存储一些较大的数据,如文本、图片、音频、视频等。
SharePreferences: Android中用来存储一些配置信息的方式,XML格式。
SQLite数据库: Android中一种轻量级的数据库,支持SQL语法。
ContentProvider: Android四大组件之一,可实现应用程序之间的数据交换,实现数据共享。
网络存储: 通过将数据存储到服务器,从而实现数据的存储。

SQLite数据库

SQLite是一种轻量级的数据库,支持SQL语法,适合存储大量数据,并对数据进行管理和维护。SQLite是目标是嵌入式的,占用资源低,没有服务进程,它通过文件保存数据,支持null(无)、integer(整型)、real(浮点型)、text(字符串)、blob(二进制)五种数据类型,在接收varchar、char等类型时会自动转化为上述五种类型之一。

要创建SQLite,首先要创建一个类继承于SQLiteOpenHelper

public class MyHelper extends SQLiteOpenHelper {    public MyHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {    //构造方法,四个参数分别为对应的上下文、数据库名称、游标工厂、数据库版本        super(context, name, factory, version);    }    @Override    public void onCreate(SQLiteDatabase db) {//数据库创建时调用    }    @Override    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {//数据库版本号增加时调用    }}

SQLite的增、删、查、改

表的建立和删除:

//建表private void createTable(SQLiteDatabase db){//创建表SQL语句String s="create table Student(sno integer primary key,sname text)";//执行SQL语句db.execSQL(s);}//删表private void dropTablle(SQLiteDatabase db){//删除表的SQL语句String sql ="DROP TABLE Student";//执行SQLdb.execSQL(sql);}

表内数据的增、删、查、改:

    //增    public void insert1(String sno, String sname){        SQLiteDatabase db = mh.getWritableDatabase();//获得可读写的SQLiteDatabase对象        ContentValues cv = new ContentValues();//创建ContentValues对象        cv.put("sno", sno);        cv.put("sname", sname);        //参数分别为数据表名称、缺省值(若插入值为空,则插入该值)、ContentValues对象        long id = db.insert("Student", null, cv);        db.close();//关闭数据库    }    private void insert2(String sno, String sname){        SQLiteDatabase db = mh.getWritableDatabase();        //插入数据SQL语句        String s="insert into Student(sno,sname) values("+sno+", "+sname+")";        //执行SQL语句        db.execSQL(s);        db.close();//关闭数据库    }    //删    public void delete1(int sno){        SQLiteDatabase db = mh.getWritableDatabase();        //条件        String where = "id=?";        //条件参数        String[] where2 = {String.valueOf(sno)};        db.delete("Student",where,where2);        db.close();//关闭数据库    }    private void delete2(int sno) {        SQLiteDatabase db = mh.getWritableDatabase();        //删除SQL语句        String sql = "delete from Student where sno = "+sno;        //执行SQL语句        db.execSQL(sql);    }    //查    private String query1(int sno) {        SQLiteDatabase db = mh.getWritableDatabase();        //参数分别为数据表名称、查询的列名、查询条件、条件参数、分组方式、having条件、定义组的过滤器、排序方式        Cursor cursor = db.query("Student", null, null, null, null, null, null);        String sname = null;        if(cursor.moveToFirst()){//判断游标是否为空            cursor.move(sno);            //获得sname            sname = cursor.getString(1);        }        cursor.close();        db.close();        return sname;    }    private String query2(int sno) {        SQLiteDatabase db = mh.getWritableDatabase();        String where = "name=?";        String[] where2 = new String[]{String.valueOf(sno)};        Cursor cursor = db.rawQuery("select * from person where "+where, where2);        String sname = cursor.getString(1);        cursor.close();        db.close();        return sname;    }    //改    private void update1(int sno, String sname) {        SQLiteDatabase db = mh.getWritableDatabase();        ContentValues cv = new ContentValues();        cv.put("sname", sname);        String[] s = new String[]{String.valueOf(sno)};        //参数分别为数据表名称、ContentValues对象、修改条件、条件参数        db.update("Student", cv, "sno=?", s);        db.close();    }    private void update2(int sno, String sname) {        SQLiteDatabase db = mh.getWritableDatabase();        String[] s = new String[]{sname, String.valueOf(sno)};        db.execSQL("update Student set sname = ? where sno = ?", s);        db.close();    }

游标的使用:
isFirst()
判断是不是第一条记录
isLast()
判断是不是最后一条记录
move(int offset)
移动到指定记录
moveToFirst()
移动到第一条记录
moveToLast()
移动到最后一条记录
moveToNext()
移动到下一条记录
moveToPosition(int positive)
移动到一个绝对位置
moveToPrevious()
移动到上一条记录
getCount()
返回行数
getColumnCount()
返回列的总数
getColumnIndex(String columnName)
返回指定列名,不存在的话返回-1
getColumnName(int columnIndex)
返回指定索引的列名
getColumnNames()
返回一个字符串数组的列名
close()
关闭游标

SQLite的事务

SQLite的事务是对数据库操作的一连串执行,可以由很多数据库操作组成,形成工作序列,事务的特点就是,当执行过程中发生错误导致无法继续执行,那么在事务中的一连串操作都无法生效,无论是执行过的还是未执行的。

        // 获得可读写的对象        SQLiteDatabase db = mh.getWritableDatabase();        //开启事务        db.beginTransaction();        try{            db.execSQL("update Student set sname = abc where sno = ?", new String[]{String.valueOf(1)});            db.execSQL("update Student set sname = def where sno = ?", new String[]{String.valueOf(1)});        } catch (SQLException e) {        }finally{            //关闭事务            db.endTransaction();            //关闭数据库            db.close();        }

更多相关文章

  1. Android系统框架
  2. [Android] Android中Timer的用法
  3. Android(安卓)四种定时器的写法
  4. Android(安卓)高效的SQLite型数据库greenDAO使用
  5. SQLiteDatabase 启用事务源码分析
  6. android界面无标题栏和全屏效果的实现方式
  7. Android(安卓)-- Sqlite事务
  8. Android(安卓)依赖报错Version 28 (intended for Android(安卓)P
  9. ubuntu android 开发环境配置

随机推荐

  1. Android(安卓)C/C++ 开发
  2. Android(安卓)source build/envsetup.sh
  3. Android(安卓)ContentObserver
  4. Android(安卓)onTouchEvent, onClick及on
  5. Android(安卓)轻松实现语音识别
  6. Android读写XML(中)――SAX
  7. Android(安卓)图片对比(图片相似度)代码
  8. Android(安卓)多进程总结
  9. Android(安卓)ListView 滑动背景为黑色的
  10. Android开发实践:Android.mk模板