我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android之SQLite数据库使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Android之SQLite数据库使用

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

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

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);                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//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方法的参数说明如下。

  • 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
    在这里插入图片描述
        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();            }        });

来源地址:https://blog.csdn.net/qq_38056514/article/details/128524676

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android之SQLite数据库使用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android之SQLite数据库使用

文章目录 简介关键类SQLiteOpenHelper创建数据库数据库操作insert增加数据update方法更新记录使用delete方法删除记录使用query方法查询记录 简介 SQLite是Android系统集成的一个轻量
2023-08-18

Android数据库之Sqlite

sqllie区别于我们以前接触的数据库,它是通过android自带的 方法来驱动数据库的建立:建立数据库表和操作数据库的大致过程:1.让一个类 去继承 SqliteOpenHelper (这是一个抽象类):重写该类的构造方法 ;实现未实现的
2022-06-06

Android数据存储之SQLite使用

SQLite是一款开源的、嵌入式关系型数据库,第一个版本Alpha发布于2000年。SQLite在便携性、易用性、紧凑性、高效性和可靠性方面有着突出的表现。 在Android中创建的SQLite数据库存储在:/data/data/<包名>/
2022-06-06

Android 安卓数据库 sqlite android自带数据库使用

Android 安卓数据库 Android是有自带的数据库的 原生数据库 public class MySQLiteHelper extends SQLiteOpenHelper {private static final String T
2022-06-06

Android创建和使用数据库SQLIte

一、关系型数据库SQLIte 每个应用程序都要使用数据,Android应用程序也不例外,Android使用开源的、与操作系统无关的SQL数据库—SQLite。SQLite第一个Alpha版本诞生于2000年5月,它是一款轻量
2022-06-06

Android中如何使用SQLite数据库

在Android中使用SQLite数据库需要进行以下步骤:创建一个继承自SQLiteOpenHelper的帮助类来管理数据库的创建和版本更新:public class DBHelper extends SQLiteOpenHelper {p
Android中如何使用SQLite数据库
2024-04-09

Android使用SQLite数据库的示例

一. 简介 SQLite数据库是一个轻量级的DBMS(数据库管理系统)。SQLite使用单个文件存储数据,Android标准库包含SQLite库以及配套使用的一些Java辅助类。主要特点:轻量级,单一文件,跨平台,开源。 二. Androi
2022-06-06

Android 开发中使用 SQLite 数据库

SQLite 是一款非常流行的嵌入式数据库,它支持 SQL 查询,并且只用很少的内存。Android 在运行时集成了 SQLite,所以每个 Android 应用程序都可以使用 SQLite 数据库。对数熟悉 SQL 的开发人员来时,使用
2022-06-06

Android入门之使用SQLite内嵌式数据库详解

Android内带SQLite内嵌式数据库了。这对于我们存储一些更复杂的结构化数据带来了极大的便利。本文就来和大家聊聊具体的使用方法,希望对大家有所帮助
2022-12-22

详解Android数据存储—使用SQLite数据库

SQLite是Android自带的关系型数据库,是一个基于文件的轻量级数据库。Android提供了3种操作数据的方式,SharedPreference(共享首选项)、文件存储以及SQLite数据库。 SQLite数据库文件被保存在/data
2022-06-06

如何在Android中使用SQLite数据库

本篇文章为大家展示了如何在Android中使用SQLite数据库,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。SQLite简介:SQLite是Android系统采用的一种开源的轻量级的关系型的数据库
2023-05-31

Android使用SQLite数据库的简单实例

先画个图,了解下Android下数据库操作的简单流程:1.首先,写一个自己的数据库操作帮助类,这个类继承自Android自带的SQLiteOpenHelper. 2.在自己的DAO层借助自己的Helper写数据库操作的一些方法 3.Acti
2022-06-06

android SQLite数据库总结

SQLite SQLite是一种超轻量级的嵌入式数据库,大小只有几百KB,但是其语法支持标准SQL语法,同时还遵循了数据库的ACID事务,所以学过其他数据库的开发人员都很容易掌握其使用。 sql语法就不介绍了,直接看在android中的使用
2022-06-06

Android SQLite数据库存储

前言:Android为了让我们更加方便的管理数据库,专门提供了SQLiteOpenHelper帮助类,借助这个类可以简单的对数据库进行创建和升级。 下面介绍一下SQLiteOpenHelper:(扩展知识) SQLiteOpenHelper
2022-06-06

Android数据的四种存储方式之SQLite数据库

Test.java: /*** 本例解决的问题:* 核心问题:通过SQLiteOpenHelper类创建数据库对象* 通过数据库对象对数据库的数据的操作* 1.sql语句方式操作SQLite数据库* 2.谷歌提供的api对SQLite数据库
2022-06-06

Android中SQLite数据库小结

Android提供了一个名为SQLiteDatabase的类,该类封装了一些操作数据库的API,使用该类可以完成对数据进行添加(Create)、查询(Retrieve)、更新(Update)和删除(Delete)操作(这些操作简称为CRUD
2022-06-06

Android持久化存储(3)SQLite数据库的使用

1.什么是SQlite SQLite是由C语言编写的一款轻型数据库,因占用资源小,处理速度快,功能齐全,特别适用于移动设备,最重要的是开源,任何人都可以使用它,许多开源项目(PHP,Python)和当今两大手机操作系统Android和iOS
2022-06-06

Python3之数据库(以SQLite为

今天,我们主要来学习数据库的创建和操作,在学习数据库之前,我们首先要知道为什么要使用数据库数据存储可以分为3种类型:1.把数据存储到内存中   优点:使用方便   缺点:程序关闭的时候,内存被释放,数据随之消失2.把数据写入到文件中   优
2023-01-31

Android编程之SQLite数据库操作方法详解

本文实例讲述了Android SQLite数据库操作方法。分享给大家供大家参考,具体如下:SQLite and AndroidSQLite简介SQLite是一个非常流行的嵌入式数据库,它支持SQL语言,并且只利用很少的内存就有很好的性能。此
2023-05-30

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录