首页 > 数据库 >SQLite数据库在Android中的使用

SQLite数据库在Android中的使用

时间:2024-07-21 11:56:36浏览次数:11  
标签:SQLite word String void Android null 数据库 SQLiteDatabase

目录

一,SQLite简介

二,SQLIte在Android中的使用

1,打开或者创建数据库

2,创建表

3,插入数据

4,删除数据

5,修改数据

 6,查询数据

三,SQLiteOpenHelper类

四,SQLite中事务的处理


一,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,插入数据

  1. table:所要执行的表名;
  2. nullColumnHack:在此处指定一个列名,当数据为空时,会向该列插入一个null。一般设为null;
  3. 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,删除数据

  1.  table:表名;

  2. whereClause:修改条件,也就是sql语句中where后的内容,可以使用占位符,如"id=?";

  3. 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,修改数据

  1. table:表名;
  2. values:修改的内容;
  3. whereClause:修改的条件,与delete的一致;
  4. 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指向的就是每一条数据。

  1. table:表名;
  2. columns:列名称数组,指定从哪些列寻找;
  3. selection:查询的条件,相当于where后的内容;
  4. selectionArgs:查询条件的参数;
  5. groupBy:分组列;
  6. having:分组条件;
  7. orderBy:排序列;
  8. 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类常用方法:

  1. abstract void onCreate():第一次创建数据库时回调;
  2. abstract void onUpgrade():数据库版本更新时回调;
  3. SQLiteDatabase  getWritableDatabase():获得可读/写的数据库;
  4. SQLiteDatabase  getReadableDatabase():获得可读的数据库;
  5. 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采用如下方法来处理事务:

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

标签:SQLite,word,String,void,Android,null,数据库,SQLiteDatabase
From: https://blog.csdn.net/IH_LZH/article/details/140415812

相关文章

  • postgresql数据库sql常用函数
    常用sql写法postgresql基本数据类型类型描述INTEGER整数类型,-2,147,483,648到2,147,483,647BIGINT大整数类型,-9,223,372,036,854,775,808到9,223,372,036,854,775,807SMALLINT小整数类型,-32,768到32,767DECIMAL精确数字类型,可定义精度和标度NUMERIC高精度数字类型,与......
  • MySQL数据库基本操作包括MySQL过程、MySQL声明
    MySQL数据库操纵数据库查看数据库showdatabases;创建数据库createdatabase<database_name>;删除数据库dropdatabase<database_name>;使用数据库usemysql操纵数据表查看数据表showtables;创建数据表CREATETABLETBL_USER(#创建user,tableU_IDINTPR......
  • Android10.0 锁屏分析-KeyguardPatternView图案锁分析
    首先一起看看下面这张图:通过前面锁屏加载流程可以知道在KeyguardSecurityContainer中使用getSecurityView()根据不同的securityModeinflate出来,并添加到界面上的。我们知道,Pattern锁所使用的layout是R.layout.keyguard_pattern_view;<com.android.keyguard.KeyguardPat......
  • SQLite修改字段类型的方法
    SQLite不支持直接修改字段类型,如需要修改字段类型,可按以下方法处理:1、将要修改的字段名改名2、用新的类型添加字段3、复制原字段的内容4、删除旧字段procedureSQLiteAlter(TableName,ColName,NewFileType:string);varsql:string;beginsql:='ALTERTABLE'+TableN......
  • 如何在Android Java中访问android/data/文件夹(应用程序包)?
    **我的应用程序的包名称是com.gorlopsen。该应用程序必须上传了没有它就无法工作的文件。文件下载到存档中并解压到android/data/com.gorlopsen文件夹中。但是,在解压阶段,出现下载错误,导致应用程序无法使用。在网上找到了有关访问所有文件的信息,但并不适合我。是否可以请求......
  • 基于Android平台开发,在线电影购票系统(九)用户评论列表实现
    1.涉及到的技术点使用SQLite数据库实现用户评论数据保存使用RecyclerView+adapter实现用户评论列表2.具体代码实现过程CommentListAdapter.java适配器publicclassCommentListAdapterextendsRecyclerView.Adapter<CommentListAdapter.MyHolder>{privateList......
  • 达梦数据库的系统视图v$dmwatcher
    达梦数据库的系统视图v$dmwatcher查询当前登录实例所对应的守护进程信息,注意一个守护进程可以同时守护多个组的实例,因此查询结果中部分字段(N_GROUP、SWITCH_COUNT)为守护进程的全局信息,并不是当前登录实例自身的守护信息。在DMDSC集群环境中,只显示控制守护进程的信息。另......
  • 我正在尝试将 Azure SQL 数据库连接到 Microsoft SQL Server Management Studio。收到
    这是完整的错误——标题:连接到服务器无法连接到adityapatil-server.database.windows.net。其他信息:建立与SQLServer的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及SQLServer是否配置为允许远程连接。(提供......
  • idea内置数据库DataGrip + 索引
    创建索引前后搜索速度差别一般是在创建表的时候创建索引,但表里又数据之后也可以创建,且索引值只需要创建一次--为数据库表tb_emp的name字段创建名为idx_emp_name的索引createindexidx_emp_nameontb_emp(name);--查询索引showindexfromtb_emp;--删除索引dropindexi......
  • Android C++系列:Linux文件系统(二)
    1.VFS虚拟文件系统Linux支持各种各样的文件系统格式,如ext2、ext3、reiserfs、FAT、NTFS、iso9660等等,不同的磁盘分区、光盘或其它存储设备都有不同的文件系统格式,然而这些文件系统都可以mount到某个目录下,使我们看到一个统一的目录树,各种文件系统上的目录和文件我们用l......