数据的访问与存储

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 高效的SQLite型数据库greenDAO使用
  2. Android五种常用数据的存储方式
  3. Android ListView中带有时间数据的排序
  4. 【黑马Android】(02)短信发送器/布局演示/android下单位/android
  5. Android的数据库--sqlite(一)
  6. Android开发集锦之二:android中的数据库操作
  7. Android创建和使用数据库详细指南
  8. android 使用Intent传递数据之全局变量传递

随机推荐

  1. Android如何关闭键盘声音
  2. Android链式方法显示Dialog
  3. Android textview设置行间距及字距
  4. Android UI(7)Building Apps with Multim
  5. Android之基于HTTP协议的下载
  6. Android Notification使用
  7. 取消EditText自动获取焦点
  8. android客户端从服务器端下载文件,服务端
  9. Android TextView 组件
  10. 列出手机中所有的App,点击启动