• SQLite 在 Android 的应用


    Android提供了创建和使用SQLite数据库的API(Application Programming Interface,应用程序编程接口)。

    在Android系统中,主要由类SQLiteDatabase和SQLiteOpenHelper对SQLite数据库进行管理和操作。

    (一)SQLiteOpenHelper类


    SQLiteOpenHelper是SQLiteDatabase的一个帮助类,用来管理数据库的创建和版本的更新。

    因为是个抽象类,所以必须创建一个类来继承它,并实现两个抽象的方法onCreate()和onUpgrade()方法。

    方法 说明

    SQLiteOpenHelper(Context context, String name, 

      SQLiteDatabase.CursorFactory factory, int version)

    构造方法
    abstract  void onCreate(SQLiteDatabase db) 创建数据库时调用

    abstract  void onUpgrade(SQLiteDatabase db,

      int oldVersion, int newVersion)

    升级数据库时调用
    void onOpen(SQLiteDatabase db)  打开数据库时调用
    SQLiteDatabase getReadableDatabase()
    创建或打开数据库
    SQLiteDatabase getWritableDatabase() 创建或打开一个读写数据库

    下面是一个具体的例子:DatabaseHelper.java

    private static class DatabaseHelper extends SQLiteOpenHelper {
    
        static final String DATABASE_NAME = "College.db";
        static final int DATABASE_VERSION = 1;
        static final String STUDENTS_TABLE_NAME = "students";
        static final String CREATE_DB_TABLE =
            " CREATE TABLE " + STUDENTS_TABLE_NAME +
            " (_id INTEGER PRIMARY KEY AUTOINCREMENT, " +
            " name TEXT NOT NULL, " +
            " grade TEXT NOT NULL);";
    
        DatabaseHelper(Context context){
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }
    
        @Override
        public void onCreate(SQLiteDatabase db)
        {
            db.execSQL(CREATE_DB_TABLE);
        }
    
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            db.execSQL("DROP TABLE IF EXISTS " + STUDENTS_TABLE_NAME);
            onCreate(db);
        }
    }

    (二)创建数据库


    在Activity中创建数据库对象,可能是在onCreate()方法或事件中创建:

    DatabaseHelper database = new DatabaseHelper(this);
    SQLiteDatabase db = null;
    db = database.getWritableDatabase();

    首先实例一个SQLiteOpenHelper帮助类的对象,然后调用该对象的getWritableDatabase() 或 getReadableDatabase()方法 获得SQLiteDatabase 数据库对象。

    另外2种创建的方法:

    1、应用SQLiteDatabase对象openDatabase()方法及openOrCreateDatabase()方法创建数据库;

    2、应用Activity继承于父类android.content.Context创建数据库的方法openOrCreateDatabase()来创建数据库。

     
    此外

    1、在DDMS中查看,College.db 生成在/data/data/xxxx(包名)/databases路径下。

    2、删除数据库文件,应用android.content.Context类的deleteDatabase(String name)方法来删除指定的数据库。

     

    (三)SQLiteDatabase 类


    SQLiteDatabase 类的方法有很多,下面是最常用的几个。一般的数据操作,可以使用对应的方法,或者自己写需要的sql语句,再调用execSQL()方法执行。

    方法 说明

    openOrCreateDatabase(String path, 

      SQLiteDatabase.CursorFactory  factory)

    打开或创建数据库

    openDatabase(String path,  SQLiteDatabase.CursorFactory  factory,int flags)

    打开指定的数据库

    insert(String table, String nullColumnHack, ContentValues  values)

    新增一条记录

    delete(String table,String whereClause, String[]  whereArgs)

    删除一条记录

    update(String table,ContentValues values, String whereClause,String[]  whereArgs)

    修改记录

    query(String table,String[] columns, String selection,

      String[]selectionArgs, String groupBy,String having, String orderBy)

    查询一条记录
    execSQL(String sql) 执行SQL语句
    close() 关闭数据库

    (四)增删改查


    对数据记录的操作处理有两种方法:

    • 编写一条对记录进行增、删、改、查的SQL语句,通过exeSQL()方法来执行
    • 使用SQLiteDatabase对象的相应方法进行操作

    数据添加

    insert(String table, String nullColumnHack, ContentValues  values)方法
    第1个参数table:增加记录的数据表;
    第2个参数nullColumnHack:空列的默认值,通常为null;
    第3个参数ContentValues:为ContentValues对象,其实就是一个键值对的字段名称,键名为表中的字段名,键值为要增加的记录数据值。通过ContentValues对象的put()方法把数据存放到ContentValues对象中。

    ContentValues cv = new ContentValues(); //实例化ContentValues用来装载待插入的数据
    cv.put("name","Apple");                 //添加学生
    cv.put("grade","A");                    //添加成绩
    db.insert("user",null,cv);              //执行插入操作

    或者

    String sql = "insert into students (name,grade) values ('Apple','A');
    db.execSQL(sql);

    数据删除

    delete(String table,String whereClause, String[]  whereArgs)方法
    第1个参数table:修改记录的数据表;
    第2个参数whereClause:删除数据的条件,相当于SQL语句的where子句;
    第3个参数whereArgs:删除条件的参数数组。

    String whereClause = "name=?";                  //删除的条件
    String[] whereArgs = {"Apple"};                 //删除的条件参数
    db.delete("students",whereClause,whereArgs);    //执行删除

    或者

    String sql = "delete from students where name='Apple'";
    db.execSQL(sql);

    数据修改

    update(String table,ContentValues values,String whereClause, String[]  whereArgs)方法
    第1个参数table:修改记录的数据表;
    第2个参数ContentValues:ContentValues对象,存放已作修改的数据的对象;
    第3个参数whereClause:修改数据的条件,相当于SQL语句的where子句;
    第4个参数whereArgs:修改数据值的数组。

    ContentValues cv = new ContentValues();         //实例化ContentValues
    cv.put("grade","AA");                           //添加要更改的字段及内容
    String whereClause = "username=?";              //修改条件
    String[] whereArgs = {"Appke"};                 //修改条件的参数
    db.update("students",cv,whereClause,whereArgs); //执行修改

    或者

    String sql = "update students set grade = 'AA' where name='Apple'";
    db.execSQL(sql);

    数据查询

    query(String table, String[] columns, String selection,
    String[] selectionArgs, String groupBy, String having, String orderBy)方法
    第1个参数table:查询记录的数据表;
    第2个参数columns:查询的字段,如为null,则为所有字段;
    第3个参数selection:查询条件,可以使用通配符“?”;
    第4个参数selectionArgs:参数数组,用于替换查询条件中的“?”;
    第5个参数groupBy:查询结果按指定字段分组;
    第6个参数having:限定分组的条件;
    第7个参数orderBy:查询结果的排序条件。

    db.query("students",null,null,null,null,null,null);

    或者

    String sql = "select * from students";
    db.execSQL(sql);

    (五)对查询结果cursor的处理


    query()方法查询的数据均封装到查询结果Cursor对象之中,Cursor相当于SQL语句中resultSet结果集上的一个游标,可以向前向后移动。

    Cursor对象的常用方法有:

    方法

    说明

    getCount()

    获取总记录条数

    isFirst()

    判断是否第一条记录

    isLast()

    判断是否最后一条记录

    moveToFirst()

    移动到第一条记录

    moveToLast()

    移动到最后一条记录

    move(int offset)

    移动到指定的记录

    moveToNext()

    移动到下一条记录

    moveToPrevious()

    移动到上一条记录

    getColumnIndex(String columnName)

    获得指定列索引的int类型值

     一个例子:

    Cursor c = db.query("students",null,null,null,null,null,null);  //查询并获得游标
    if(c.moveToFirst()){                                            //判断游标是否为空
        for(int i=0;i<c.getCount();i++){
            c.move(i);                                              //移动到指定记录
            String name = c.getString(c.getColumnIndex("name");
            String grade = c.getString(c.getColumnIndex("grade"));
        }
    }
  • 相关阅读:
    205. Isomorphic Strings
    8 旋转数组的最小数字
    303. Range Sum Query
    70. Climbing Stairs
    HDU 5971 Wrestling Match (二分图)
    URAL 2019 Pair: normal and paranormal (STL栈)
    URAL 2021 Scarily interesting! (贪心+题意)
    URAL 2018 The Debut Album (DP)
    HDU 5236 Article (概率DP+贪心)
    HDU 5241 Friends (大数)
  • 原文地址:https://www.cnblogs.com/luoxu34/p/5246001.html
Copyright © 2020-2023  润新知