Android数据存储————SQLite数据库创建及增删改查操作

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_29675423/article/details/85863953

(一)Android数据存储————文件存储(内部存储):https://blog.csdn.net/sinat_29675423/article/details/85699131
(二)Android数据存储————文件存储(外部存储):https://blog.csdn.net/sinat_29675423/article/details/85705545
(三)Android数据存储————SharedPreference使用及封装:https://blog.csdn.net/sinat_29675423/article/details/85778297

本文简介SQLite数据库的创建及增删改查操作。

存储特点

SQLite非常容易上手,不需要服务器也不需要复杂配置的小型的、单文件形式的数据库。它效率高、开源跨平台、支持事务操作、可嵌入…总之很受欢迎。

存储位置

数据库为.db文件,存在data/data/<package_name>/databases/,里面可以存放数据表。
在这里插入图片描述

数据库查看

这里以sqlite3为例,简述在command中查看数据库及表中内容:

  1. 进入数据库目录 databases (cd data/data/包名/databases)
  2. 进入数据库 studentStore (sqlite3 studentStore)
  3. 接下来就可以用sql语句进行操作
  4. 比如:查看数据库中的表 tables (.tables)
  5. 比如:查看表中的所有数据 (select * from table;)
    在这里插入图片描述

存储数据类型

类型 描述
INTEGER 一个带符号的整数
NULL 一个 NULL 值
REAL 一个浮点值
TEXT 一个文本字符串

数据库创建

需要理解下面两个重要的类,具体可到android developer官网查看api开发文档。

  • SQLiteOpenHelperA helper class to manage database creation and version management.You create a subclass implementing onCreate(SQLiteDatabase), onUpgrade(SQLiteDatabase, int, int) and optionally onOpen(SQLiteDatabase), and this class takes care of opening the database if it exists, creating it if it does not, and upgrading it as necessary. Transactions are used to make sure the database is always in a sensible state.
  • SQLiteDataBaseSQLiteDatabase has methods to create, delete, execute SQL commands, and perform other common database management tasks.
    ————摘自android developer API说明

SQLiteOpenHelper的常用方法:
构造函数: DataBaseHelper(Context context, String DataBasename, SQLiteDatabase.CursorFactory factory, int version)
创建方法: onCreate()
更新升级方法:onUpdate()
获取SQLiteDataBase对象:getWritableDatabase()

实现一个类,继承自SQLiteOpenHelper(SQLiteDataBase的帮助类)
public class DataBaseHelper extends SQLiteOpenHelper {

    //创建一个名叫Student的表,字段有_id, name, class, age
    private static final String CREATE_STUDENT = "create table Student("+
            "_id integer primary key autoincrement," + "name text,"+
            "class text,"+ "age Integer)";

    private Context mcontext;

    public DataBaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
        this.mcontext = context;
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        //创建
        db.execSQL(CREATE_STUDENT);
        Toast.makeText(mcontext,"数据库创建成功",Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    }
}

主程序中调用

private void creteDataBaseTable() {
        mDataBaseHelper = new DataBaseHelper(SQLActivity.this, "studentStore", null, 1);
        mDataBaseHelper.getWritableDatabase();
    }

数据库操作

可以使用SQL语句进行增删改查,也可以使用SQLiteDataBase提供的相关API

SQL语句

添加数据

execSQL(String sql, Object[] bindArgs)
代码示例:在表Student中添加两行数据

private void addBySQL() {
        SQLiteDatabase writableDatabase = mDataBaseHelper.getWritableDatabase();
        writableDatabase.execSQL("insert into Student (name, class, age) values (?,?,?)",
                new String[]{"mask","computer technology", "23"});
        writableDatabase.execSQL("insert into Student (name, class, age) values (?,?,?)",
                new String[]{"duck","source technology", "25"});
    }

更新数据

execSQL(String sql, Object[] bindArgs)
代码示例:从Student表中将“name”为“mask”的数据的“age”字段的值修改为30

private void updateBySQL() {
        SQLiteDatabase writableDatabase = mDataBaseHelper.getWritableDatabase();
        writableDatabase.execSQL("update Student set age = ? where name = ?", new String[]{"30", "mask"});
    }

删除数据

execSQL(String sql, Object[] bindArgs)
代码示例:从Student表中删除“name”是“duck”的数据

private void deleteBySQL() {
        SQLiteDatabase writableDatabase = mDataBaseHelper.getWritableDatabase();
        writableDatabase.execSQL("delete from Student where name = ?", new String[]{"duck"});
    }

查询数据

rawQuery(String sql, String[] selectionArgs)
代码示例:从表student中查询带有"name"字段带有“du”的所有数据,并将查询结果输出

private void qurryBySQL() {
        SQLiteDatabase writableDatabase = mDataBaseHelper.getWritableDatabase();
        Cursor cursor = writableDatabase.rawQuery("select * from Student where name like ?", new String[]{"%du%"});
        if(cursor.moveToFirst()){
            do{
                String name = cursor.getString(cursor.getColumnIndex("name"));
                String clas = cursor.getString(cursor.getColumnIndex("class"));
                int age = cursor.getInt(cursor.getColumnIndex("age"));
                Log.i("数据库存储 SQL查询","name:"+name+"; class:"+clas+"; age:"+age);
            }while (cursor.moveToNext());
        }
        cursor.close();//释放游标,防止内存泄漏
    }

SQLiteDataBase API

添加数据

insert(String table, String nullColumnHack, ContentValues values)
示例:添加一行数据

 private void addByAPI() {
        SQLiteDatabase writableDatabase = mDataBaseHelper.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put("name", "duck");
        contentValues.put("class", "environment");
        contentValues.put("age", 35);
        writableDatabase.insert("Student",null,contentValues);
    }

更新数据

update(String table, ContentValues values, String whereClause, String[] whereArgs)
示例:将mask的age修改为33

private void updateByAPI() {
        SQLiteDatabase writableDatabase = mDataBaseHelper.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put("age", 33);
        writableDatabase.update("Student",contentValues,"name = ?",new String[]{"mask"});
    }

删除数据

delete(String table, String whereClause, String[] whereArgs)
示例:删除duck

private void deleteByAPI() {
        SQLiteDatabase writableDatabase = mDataBaseHelper.getWritableDatabase();
        writableDatabase.delete("Student","name = ?", new String[]{"duck"});
    }

查询数据

query(String table, String[] columns, String selection,
String[] selectionArgs, String groupBy, String having,
String orderBy)
示例:从表student中查询带有"name"字段带有“du”的所有数据,并将查询结果输出

private void qurryByAPI() {
        SQLiteDatabase writableDatabase = mDataBaseHelper.getWritableDatabase();
        Cursor cursor = writableDatabase.query("Student", null, "name like ?", new String[]{"%du%"}, null, null, null);
        if(cursor.moveToFirst()){
            do{
                String name = cursor.getString(cursor.getColumnIndex("name"));
                String clas = cursor.getString(cursor.getColumnIndex("class"));
                int age = cursor.getInt(cursor.getColumnIndex("age"));
                Log.i("数据库存储 API查询","name:"+name+"; class:"+clas+"; age:"+age);
            }while (cursor.moveToNext());
        }
        cursor.close();//释放游标,防止内存泄漏
    }

猜你喜欢

转载自blog.csdn.net/sinat_29675423/article/details/85863953