SQLite数据库在Android中的使用小结

 更新时间:2024年07月23日 11:31:52   作者:IH_LZH  
SQLIte是一款轻型的数据库,占用资源非常低,在嵌入式设备中,可能只需几百k的内存,这篇文章主要介绍了SQLite数据库在Android中的使用,需要的朋友可以参考下

一,SQLite简介

        SQLite是一个无服务器的零配置的事务性的SQL数据库引擎。无服务器,意味着使用sqlite不需要联网;不需要配置,意味着不需要安装和管理;同时sqlite遵循ACID原则。SQLIte是一款轻型的数据库,占用资源非常低,在嵌入式设备中,可能只需几百k的内存。

二,SQLIte在Android中的使用

        Android中使用SQLiteDatabase代表数据库,并提供了一系列方法来操作数据库。对于常用的增删改查操作,既可以使用execSQL()方法直接执行sql语句,也可以使用Android提供的方法,由于execSQL()方法返回void,无法判断是否执行成功,所以除创建表之外的操作通常使用Android提供的一系列方法。

1,打开或者创建数据库

        使用openOrCreateDatabase()打开或者创建一个数据库,如果数据库存在则打开数据库,反之则创建一个数据库。创建成功则返回SQLiteDatabase对象,否则抛出异常。使用时需提供创建路径和一个游标工厂;

private void initDatabase() {
    String filePath = getFilesDir().getAbsolutePath() + "wordDB.db";
    DB = SQLiteDatabase.openOrCreateDatabase(filePath, null);
    Log.i("DB", "数据库初始化成功!");
}

2,创建表

表的创建可以通过SQLiteDatabase的exexSQL()方法直接执行sql语句来创建;

private void inittable() {
    String table = "create table tb_word(" +
            "id integer primary key autoincrement," +
            "word varchar(20) not null," +
            "translation varchar(20) not null);";
    DB.execSQL(table);
}

3,插入数据

  • table:所要执行的表名;
  • nullColumnHack:在此处指定一个列名,当数据为空时,会向该列插入一个null。一般设为null;
  • values:要插入的内容;
private void insert() {
    //所要插入的数据
    ContentValues contentValues = new ContentValues();
    contentValues.put("word", word);
    contentValues.put("translation", translation);
    //执行插入
    long id = wordDB.insert("tb_word", null, contentValues);
    if(id > 0){
        Toast.makeText(this, "录入成功!", Toast.LENGTH_SHORT).show();
    }
}

4,删除数据

  •  table:表名;
  • whereClause:修改条件,也就是sql语句中where后的内容,可以使用占位符,如"id=?";
  • whereArgs:修改条件参数,当whereClause使用占位符时,在此处填入条件参数,形式为字符串数组;
private void delete() {
    //删除条件
    String whereClause = "word = ?";
    //删除条件参数
    String[] whereArgs = {String.valueOf(words.getWord())};
    //执行删除
    int row = wordDB.delete("tb_word", whereClause, whereArgs);
    if(row > 0){
        Log.i("delete", "删除成功");
    }else {
        Log.i("delete", "删除失败");
    }
}

5,修改数据

  • table:表名;
  • values:修改的内容;
  • whereClause:修改的条件,与delete的一致;
  • whereArgs:修改条件参数; 
private void update(){
    //修改的内容
    ContentValues values = new ContentValues();
    values.put("translation", translation);
    //修改条件
    String whereClause = "word=?";
    //修改条件参数
    String[] whereArgs = {word};
    //执行修改
    int row = wordDB.update("tb_word", values, whereClause, whereArgs);
    if(row > 0){
        Log.i("update", "更新成功");
    }else {
        Log.i("update", "更新失败");
    }
}

 6,查询数据

        在Android中查询数据是通过Cursor类来实现的,当我们使用SQLiteDatabase.query()方法时,会得到一个Cursor对象,Cursor指向的就是每一条数据。

  • table:表名;
  • columns:列名称数组,指定从哪些列寻找;
  • selection:查询的条件,相当于where后的内容;
  • selectionArgs:查询条件的参数;
  • groupBy:分组列;
  • having:分组条件;
  • orderBy:排序列;
  • limit:分页查询限制;

Cursor游标类常用方法:

private void searchWord() {
    //查询条件
    String selection = "word=?";
    //查询条件参数
    String[] selectionArgs = { String.valueOf(word) };
    //执行查询,获取游标类
    Cursor cursor = wordDB.query("tb_word", null, selection, selectionArgs , null, null, null);
    StringBuffer result = new StringBuffer();
    while(cursor.moveToNext()){
        int idOfWord = cursor.getColumnIndex("word");
        String word1 = cursor.getString(idOfWord);
        int idOfTranslation = cursor.getColumnIndex("translation");
        String translation = cursor.getString(idOfTranslation);
        result.append(word1 + ": " + translation + "\n");
    }
    tv_words.setText(result.toString());
}

三,SQLiteOpenHelper类

        Android提供SQLiteOpenHelper类来管理数据库。主要负责数据库的创建版本更新,一般情况通过创建它的子类并扩展onCreate()onUpgrade()方法来实现。 

SQLiteOpenHelper类常用方法:

  • abstract void onCreate():第一次创建数据库时回调;
  • abstract void onUpgrade():数据库版本更新时回调;
  • SQLiteDatabase  getWritableDatabase():获得可读/写的数据库;
  • SQLiteDatabase  getReadableDatabase():获得可读的数据库;
  • void close():关闭所有打开的SQLiteDatabase;

 (1)创建SQLiteOpenHelper的子类,并重写方法:

public class MySqliteHelper extends SQLiteOpenHelper {
    public MySqliteHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        String table = "create table tb_word(" +
                "id integer primary key autoincrement," +
                "word varchar(20) not null," +
                "translation varchar(20) not null);";
        db.execSQL(table);
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    }
}

(2)通过子类来创建数据库:

private void initDatabaseHelper() {
    mySqliteHelper = new MySqliteHelper(
            this,
            "wordDB.db",
            null,
            1
    );
    SQLiteHelperUtil.wordDB = mySqliteHelper.getWritableDatabase();
    Log.i("wordDB", "数据库初始化成功!");
}

四,SQLite中事务的处理

SQLite采用如下方法来处理事务:

  • beginTransaction():开启事务;
  • setTransactionSuccessful():标记事务成功;
  • endTransaction():提交事务,当事务执行失败时,可调用此方法回滚事务;
db.beginTransaction();
try {
        // 执行事务中的sql语句
        db.setTransactionSuccessful();
} finally {
        db.endTransaction();
    }
}

到此这篇关于SQLite数据库在Android中的使用的文章就介绍到这了,更多相关Android SQLite数据库内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Android中传值Intent与Bundle的区别小结

    Android中传值Intent与Bundle的区别小结

    这篇文章主要给大家总结介绍了关于Android中传值Intent与Bundle的区别,文中通过示例代码以及图文介绍的非常详细,对各位Android开发者们具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-03-03
  • Android自定义view实现水波进度条控件

    Android自定义view实现水波进度条控件

    这篇文章主要为大家详细介绍了Android自定义view实现水波进度条控件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • Android侧滑菜单控件DrawerLayout使用详解

    Android侧滑菜单控件DrawerLayout使用详解

    这篇文章主要为大家详细介绍了Android侧滑菜单控件DrawerLayout的使用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • Android Studio导入jar包过程详解

    Android Studio导入jar包过程详解

    这篇文章主要介绍了Android Studio导入jar包过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • 模仿美团点评的Android应用中价格和购买栏悬浮固定的效果

    模仿美团点评的Android应用中价格和购买栏悬浮固定的效果

    这篇文章主要介绍了模仿美团点评的Android应用中价格和购买栏悬浮固定的效果,文章后半还针对快速滑动操作给出了一个响应优化的方法,需要的朋友可以参考下
    2016-04-04
  • 利用Android实现比较炫酷的自定义View

    利用Android实现比较炫酷的自定义View

    自定义View、多线程、网络,被认为是Android开发者必须牢固掌握的最基础的三大基本功,这篇文章主要给大家介绍了关于如何利用Android实现比较炫酷的自定义View的相关资料,需要的朋友可以参考下
    2021-07-07
  • 详解Android的OkHttp包编写异步HTTP请求调用的方法

    详解Android的OkHttp包编写异步HTTP请求调用的方法

    OkHttp支持Callback异步回调来实现线程的非阻塞,下面我们就来详解Android的OkHttp包编写异步HTTP请求调用的方法,需要的朋友可以参考下
    2016-07-07
  • Android 自定义View实现抽屉效果

    Android 自定义View实现抽屉效果

    这篇文章主要介绍了Android 自定义View实现抽屉效果的相关资料,需要的朋友可以参考下
    2017-05-05
  • 一文带你深入理解Android Window系统

    一文带你深入理解Android Window系统

    Android中的窗口系统是应用程序用户界面的核心组件之一,它负责管理可视化区域、处理用户输入事件以及与系统UI交互,本文将深入介绍与Android窗口系统相关的重要概念,需要的朋友可以参考下
    2023-10-10
  • Android开发使用json实现服务器与客户端数据的交互功能示例

    Android开发使用json实现服务器与客户端数据的交互功能示例

    这篇文章主要介绍了Android开发使用json实现服务器与客户端数据的交互功能,结合具体实例形式分析了Android使用json格式数据在服务器与客户端传递实现数据库查询功能的步骤与相关操作技巧,需要的朋友可以参考下
    2017-10-10

最新评论