Android之SQLite数据库使用

这篇具有很好参考价值的文章主要介绍了Android之SQLite数据库使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简介

SQLite是Android系统集成的一个轻量级的数据库。

Android提供了SQLiteDatabase代表一个数据库(底层就是一个数据库文件),一旦应用程序获得了代表指定数据库的SQLiteDatabase对象,接下来可通过SQLiteDatabase对象来管理、操作数据库了。

关键类SQLiteOpenHelper

Android为了让我们能够更加方便地管理数据库,专门提供了一个SQLiteOpenHelper帮助类,通过SQLiteOpenHelper可用于管理数据库的创建和版本更新。一般的用法是创建SQLiteOpenHelper的子类,并重写它的onCreate(SQLiteDatabase db)和onUpgrade(SQLiteDatabase db,int oldVersion, int newVersion)方法。

SQLiteOpenHelper包含如下常用方法:

  • synchronized SQLiteDatabase getReadableDatabase(): 以读写的方式打开数据库对应的SQLiteDatabase对象。一旦数据库的磁盘空间满了,数据库就只能读不能写。否则调用该方法将出现异常。
  • synchronized SQLiteDatabase getWritableDatabase(): 以写的方式打开数据库对应的SQLiteDatabase对象。数据库的磁盘空间满了,调用该方法打开失败,失败后会继续尝试以只读的方式打开数据库
  • abstarct void onCreate(SQLiteDatabase db): 当第一次创建数据库时 回调该方法。当调用getReadableDatabase和getWritableDatabase方法用于获取操作数据库的SQLiteDatabase实例的时候,如果数据库不存在,Android系统会自动生成一个数据库,然后调用onCreate方法,该方法在初次创建数据库的时候才会被调用。
  • abstract void onUpgrade(SQLiteDatabase db): 当数据库版本更新的时候回调该方法。SQLiteOpenHelper构造函数的中版本值不同,就会调用该方法。
  • synchronized void close(): 关闭所有打开的SQLiteDatabase对象。

public class MyDatabaseHelper extends SQLiteOpenHelper {

    // 创建一个Book表
    public static final String CREATE_BOOK = "create table Book ("
            + "id integer primary key autoincrement, "
            + "author text, "
            + "price real, "
            + "pages integer, "
            + "name text)";

    private Context mContext;

    public MyDatabaseHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
        mContext = context;
    }

	// on
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_BOOK);
        Toast.makeText(mContext, "Create succeed", Toast.LENGTH_SHORT).show();
    }

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

    }
}

这里我们在onCreate()方法中构建了一个MyDatabaseHelper对象,并且通过构造函数的参数将数据库名指定为BookStore.db,版本号指定为1,然后在Create database按钮的点击事件里调用了getWritableDatabase()方法。这样当第一次点击Create database按钮时,就会检测到当前程序中并没有BookStore.db 这个数据库,于是会创建该数据库并调用MyDatabaseHelper中的onCreate()方法,这样Book表也就得到了创建,然后会弹出一个Toast提示创建成功。再次点击Create database按钮时,会发现此时已经存在BookStore.db数据库了,因此不会再创建一次。

创建数据库

Activity 代码如下;
布局里面 就是一个创建数据库的Button,不在列出

public class SqliteMainActivity extends AppCompatActivity {

    private MyDatabaseHelper myDatabaseHelper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sqlite_main);

        /**
         * 这个构造方法中接收4个参数,
         * 第一个参数是Context,这个没什么好说的,必须要有它才能对数据库进行操作。
         * 第二个参数是数据库名,创建数据库时使用的就是这里指定的名称。
         * 第三个参数允许我们在查询数据的时候返回一个自定义的Cursor,一般都是传入null。
         * 第四个参数表示当前数据库的版本号,可用于对数据库进行升级操作。
         */
        myDatabaseHelper = new MyDatabaseHelper(this,"BookStore.db",null,1);

        Button create_db_btn = findViewById(R.id.create_db_btn);
        create_db_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                myDatabaseHelper.getWritableDatabase();
            }
        });

    }
}

创建的数据库文件会存放在/data/data/<package name>/databases/目录下

数据库操作

SQLiteDatabase的execSQL可以执行任何SQL语句,使用特定的方法操作SQLite数据库,也更加方便,接下来演示特定的方法操作数据库。

insert增加数据

SQLiteDatabase的insert方法为long insert(String table, String nullColumnHack,ContentValues values) 插入方法的参数说明如下:

  • table:代表想插入的数据的表明
  • nullColumnHack: 强行指定插入null值得数据列的列名。一般用不到,传入null即可。
  • contentValues对象:类似于Map,提供了一系列的put方法重载,其中key为数据列的列名。
        // 插入数据库
        insert_btn = findViewById(R.id.insert_btn);
        insert_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ContentValues values = new ContentValues();
                // 开始组装第一条数据
                values.put("name", "The Da Vinci Code");
                values.put("author", "Dan Brown");
                values.put("pages", 454);
                values.put("price", 16.96);
                db.insert("Book", null, values); // 插入第一条数据
                values.clear();
                // 开始组装第二条数据
                values.put("name", "The Lost Symbol");
                values.put("author", "Dan Brown");
                values.put("pages", 510);
                values.put("price", 19.95);
                db.insert("Book", null, values); // 插入第二条数据

            }
        });

不管第三个参数是否包含数据,执行insert()方法总会添加一条记录,如果第三个参数为空,则会添加一条除主键之外其他字段值都为null的记录。

insert()方法的底层实际上依然是通过构造 insert SQL语句来进行插入的,因此它生成的SQL语句总是形如下面的语句。

// ContentValues里key-value对的数量决定了下面的key-value对
insert into <表名>(key1, key2 ...)
values (value1 , value2 ...)

update方法更新记录

SQLiteDatabase update 方法update(String table, ContentValues values, StringwhereClause, String[] whereArgs),这个更新方法的参数说明如下:

  • table:代表想更新数据的表名
  • table:代表想更新数据的表名
  • whereClause:满足该whereClause子句的记录将会被更新
  • whereArgs:用于为whereClause子句传入参数
        Button updateData = (Button) findViewById(R.id.update_data);
        updateData.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SQLiteDatabase db = dbHelper.getWritableDatabase();
                ContentValues values = new ContentValues();
                values.put("price", 10.99);
                // ?代表占位符,由第四个参数的字符串数组提供
                int result = db.update("Book", values, "name = ?", new String[] { "The Da Vinci Code" });
            }
        });

该方法返回受此update语句影响的记录的条数

实际上,update方法底层对应的SQL语句如下:

update <table>
set key1=value1, key2=value2...
where <whereCalues>

其中whereArgs参数用于向whereClause中传入参数

使用delete方法删除记录

SQLiteDatabase delete 方法 delete(String table , String whereClause, String]whereArgs),这个删除方法的参数说明如下。

  • table:代表想删除数据的表名。
  • whereClause:满足该whereClause子句的记录将会被删除。
  • whereArgs:用于为 whereClause 子句传入参数。

该方法返回受此 delete语句影响的记录的条数。

        Button deleteButton = (Button) findViewById(R.id.delete_data);
        deleteButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SQLiteDatabase db = dbHelper.getWritableDatabase();
                db.delete("Book", "pages > ?", new String[] { "500" });
            }
        });

实际上,delete方法底层对应的SQL语句如下:

delete <table>
where <whereClause>

使用query方法查询记录

QLiteDatabase query 方法 Cursor query(boolean distinct, String table, String]columns, String whereClause, String] selectionArgs, String groupBy, String having, String orderBy,String limit),这个query方法的参数说明如下。
QLiteDatabase query 法的签名 Cursor query(boolean distinct, String table, String]columns, String whereClause, String] selectionArgs, String groupBy, String having, String orderBy,String limit),这个query方法的参数说明如下。文章来源地址https://www.toymoban.com/news/detail-579633.html

  • table:执行查询数据的表名。
  • columns:要查询出来的列名。相当于select 语句 select关键字后面的部分。
  • whereClause:查询条件子句,相当于 select 语句where 关键字后面的部分,在条件子句中允许使用占位符“?”。
  • selectionArgs:用于为 whereClause子句中的占位符传入参数值,值在数组中的位置与占位符在语句中的位置必须一致;否则就会有异常
  • groupBy:用于控制分组。相当于select 语句group by 关键字后面的部分
  • having: 用于对分组进行过滤。相当于 select 语句 having关键字后面的部分
  • orderBy:用于对记录进行排序。相当于select 语句 order by 关键字后面的部分,如 personiddesc, age asclimit:用于进行分页。相当于 select 语句 limit 关键字后面的部分,如 5,10
    android sqlite,android,数据库,sqlite,android
        Button queryButton = (Button) findViewById(R.id.query_data);
        queryButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SQLiteDatabase db = dbHelper.getWritableDatabase();
                // 查询Book表中所有的数据
                Cursor cursor = db.query("Book", null, null, null, null, null, null);
                if (cursor.moveToFirst()) {
                    do {
                        // 遍历Cursor对象,取出数据并打印
                        String name = cursor.getString(cursor.getColumnIndex("name"));
                        String author = cursor.getString(cursor.getColumnIndex("author"));
                        int pages = cursor.getInt(cursor.getColumnIndex("pages"));
                        double price = cursor.getDouble(cursor.getColumnIndex("price"));
                        Log.d("MainActivity", "book name is " + name);
                        Log.d("MainActivity", "book author is " + author);
                        Log.d("MainActivity", "book pages is " + pages);
                        Log.d("MainActivity", "book price is " + price);
                    } while (cursor.moveToNext());
                }
                cursor.close();
            }
        });

到了这里,关于Android之SQLite数据库使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 安卓大作业:使用Android Studio开发天气预报APP(使用sqlite数据库)

    今天我来分享一下如何使用Android Studio开发一个天气预报APP。在文中,我们将使用第三方接口获取实时天气数据,并显示在APP界面上。 首先,打开Android Studio并创建一个新的项目。在创建新项目时,我们需要设置项目名称、包名和支持的最低API级别。 为了获取实时天气数据,

    2024年02月08日
    浏览(61)
  • Android期末大作业:使用AndroidStudio开发图书管理系统APP(使用sqlite数据库)

    Android Studio开发项目图书管理系统项目视频展示: 点击进入图书管理系统项目视频 现在是一个信息高度发达的时代,伴随着科技的进步,文化的汲取,人们对于图书信息的了解与掌握也达到了一定的高度。尤其是学生对于知识的渴求更是与日俱增。图书馆作为学生学习知识的

    2024年02月08日
    浏览(57)
  • Android Studio 使用SQLite数据库来创建数据库+创建数据库表+更新表再次往表添加字段

    目录 一.前言 二.SQLite数据库介绍 1.什么是SQLite数据库 2.特点 3.SQLite 操作API 4.SQLite数据类型 三.SQlite数据库的使用 1.创建类继承SQLiteOPenHelper 2.创建数据库 3.创建数据库表 4.更新表添加字段 完整代码 扩展 总结 我们在使用Android进行开发的时候不可避免的要使用到数据,那么就需

    2024年02月08日
    浏览(58)
  • [Android Studio]Android 数据存储--SQLite数据库存储

     🟧🟨🟩🟦🟪 Android Debug 🟧🟨🟩🟦🟪 Topic   发布安卓学习过程中遇到问题解决过程,希望我的解决方案可以对小伙伴们有帮助。 💯实战演练--基于SQLite数据库的通讯录实现数据的增删改查 1,创建程序 2,放置界面控件 3,编写界面交互代码 4, 核心方法讲解 5,数据库

    2024年02月08日
    浏览(51)
  • Android 进阶 1、sqlite数据库

    在我们学会了Android的基本使用之后就需要往高处发展了,毕竟水往高处流,很多时候我们学习一门技术感觉没有收获都是因为还没到那个层次,当你一步步往上走的时候就会渐渐发现自己收获的越来越多,进步也就会越来越快了,废话不多说,回到正题; 1、认识数据库 安卓

    2024年02月10日
    浏览(48)
  • Android中SQLite数据库查询详解

    SQLite在线教程网址https://www.yiibai.com/sqlite table :表名。相当于select *** from table语句中的table 。如果是多表联合查询,可以用逗号将两个表名分开。 columns :要查询出来的列名(字段),全部查询就写null。相当于 select *** from table语句中的 ***部分 。如果是查询多个参数,可以用

    2024年01月16日
    浏览(57)
  • Android studio引入外部SQLite数据库,获取数据库列表数据

    准备好Android studio和一个创建管理数据库的软件,推荐SQLite Expert Professional或者Navicat Premium。这里以SQLite Expert Professional为例。 1.穿件sqlite数据库,按照自己的项目要求定义数据库和相应的数据表 1.在main目录下创建assets文件,将准备好的sqlite数据库文件放入这个目录下 解释:

    2024年02月08日
    浏览(57)
  • Android studio 连接SQLite数据库 +创建数据库+创建数据库表

    Android studio 之数据库的使用 连接创建SQLite 大家好,欢迎来到寒依。 相信看啦我的教程 当老师问你在学习Android studio 数据库使用过程中遇到什么困难,分享一下你的感悟和解决方法 的时候,你可以直接大胆的说出来: “老师我没有遇到问题,看啦寒依的教程 畅行无阻” 我

    2024年02月02日
    浏览(55)
  • Android Studio App开发中数据库SQLite的解析及实战使用(包括创建数据库,增删改查,记住密码等 附源码必看)

    运行有问题或需要源码请点赞关注收藏后评论区留言~~~ SQLite是一种小巧的嵌入式数据库,使用方便,开发简单,如同mysql,oracle那样,SQLite也采用SQL语句管理数据,由于它属于轻型数据库,不涉及复杂的数据控制操作,因此App开发只用到数据定义和数据操纵两类SQL。 1:数据

    2024年02月03日
    浏览(86)
  • 【Jetpack】使用 Room 框架访问 Android 平台 SQLite 数据库 ( 导入依赖 | 定义 Entity 实体类 | 定义 Dao 数据库访问对象接口 | 定义数据库实例类 )

    对于 Room 框架 来说 , 使用 Java 语言 开发和使用 Kotlin 语言 开发 , 需要在 build.gradle 构建脚本 中进行不同的配置 , 主要有以下两个配置不同 : 应用的插件不同 ; 导入依赖库方式不同 ; 应用插件 应用的插件区别 : 如果使用 Java 语言开发 , 只需要导入 android 插件 ; 如果使用 Kotli

    2024年02月05日
    浏览(62)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包