Android数据库基础用法

【Android-ContentProvider】contentProvider基础用法详解及相关代码 本文是针对ContentProvider基础用法的模拟: ContentProvider主要是用于将数据库变为provider提供给第三方使用的控件 本文将创建一个数据库,一个第三方使用者来演示如何使用该组件。 具体步骤: 写一个内容提供者,继承自contentprovider 在mainfest中注册,并开启权限 校验URI的工具类和指定相关规则 以查询为例,写query方法 模拟一个第三方应... 阅读详情

Android数据库

SQliteOpenHelper

首先封装一个SQliteOpenHelper,这是安卓的数据库帮助类,一般建表和封装增删改查方法等工作都放在这个里面

public class LocalDataHelper extends SQLiteOpenHelper{
    public static final String detail_customer_table = "detail_customer";//定义一个静态的常量表示表名

    //设计一张表
    private String createSimple = "create table "+simple_customer_table+"(" +
            "id INTEGER(20)  primary key ," +  //默认id
            "name varchar2(20)," + // 客户姓名
            "phone varchar2(20)," + // 手机号
            "createTime varchar2(20)" + // 创建时间
            ");";
    //构造方法        
    public LocalDataHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
       db.execSQL(createSimple );//新建一张表
    }

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

    }


}

这样一个SQLiteOpenHelper就重写好了,在我们自定义的这个SQLiteOpenHelper里我们设计了一张表detail_customer,包含四个字段id(主键),name,phone,createTime,要注意每个字段之间要用“,”隔开,execSQL()这个方法是SQLiteDatabase的一个方法,是执行括号里面的SQL语句。.

SqliteDatabase

这个类是安卓官方提供的对数据库进行操作的类,里面我们主要用到四个基本的方法:insert,delete,update,query。也就是最基础的增删改查四个功能。

public class ClientActivity extends BaseActivity {
    private LocalDataHelper helper;
    private SQLiteDatabase database;

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

        //通过构造方法新建一个数据库info_input_db
        helper = new LocalDataHelper(this, "info_input_db", null, 1);
        database = helper.getWritableDatabase();

    }
}

insert

public long insert(String table, String nullColumnHack, ContentValues values)

insert方法带有三个参数,table:表名,values:ContentValues 类型参数集合,nullColumnHack:如果values为空的话,除主键外其他字段设置的默认值,一般我们都个这个参数传一个null。
在使用这个方法时,我们一般先创建一个ContentValues对象来添加数据,它的使用方法与Map基本相同:

    ContentValues cv = new ContentValues();
    cv.put("id","01");
    cv.put("name ","Android");
    cv.put("phone ","13390000000");
    cv.put("createTime ","2017-03-14");

insert方法的返回值是一个long类型的数,它的值是你这个语句添加的数据的行的id,也就是你的数据添加到了第几行,所以只要返回值大于0,就是插入成功了

    long result = database .insert(LocalDataHelper.detail_customer_table,null,cv);

    if(result > 0){
    //添加成功
    }else{
    //添加失败
    }

delete

public int delete(String table, String whereClause, String[] whereArgs)

同样delete方法也有三个参数 table:表名,whereClause:可选的where语句,whereArgs:whereClause语句中表达式的?占位参数列表。
whereClause参数一般为“列名=?”这种形式,例如:id=?,而whereArgs是一个String类型的数组,直观的我们可以new一个String[]:
delete的返回值是一个int类型,代表的含义一般为删除的行数(官方解释为如果whereclause通过受影响的行数),如果删除全部的话返回值为1,删除失败一般返回0

    int result = database .delete(LocalDataHelper.detail_customer_table,"id=?",new String[]{"1","2"});//删除ID为1和2 的两条数据

    if(result > 0){
    //删除成功
    }else{
    //删除失败
    }

update

public int update(String table, ContentValues values, String whereClause, String[] whereArgs)

update方法有四个参数 table:表名,values:你需要修改的字段和值,whereClause:可选的where语句,whereArgs:whereClause语句中表达式的?占位参数列表。
这里的参数使用方法和insert与delete里面同名参数用法一样,值得注意的是,这里的values可以就修改整条数据中的某几个字段,不修改的字段可以不放进去。
返回值是一个int值,一般表示受影响的行数,也就是修改成功的行数

    ContentValues cv = new ContentValues();
    cv.put("name ","ios");
    cv.put("phone ","13390005000");
    cv.put("createTime ","2016-03-14");

    int result = db.update(table,cv,"id=?",new String[]{"1"}

    if(result > 0){
    //修改成功
    }else{
    //修改失败
    }

query

query方法在官方API中有四种,在这里我们只介绍最简单的两种,至于其他的两种方法详见官方API

public Cursor query(String table, String[] columns, String selection,
            String[] selectionArgs, String groupBy, String having,
            String orderBy)

public Cursor query(String table, String[] columns, String selection,
            String[] selectionArgs, String groupBy, String having,
            String orderBy, String limit)

query第一个方法有7个参数,table:要查询的表名;columns:想要显示的列;selection:where子句;selectionArgs:where子句对应的条件值;groupBy:分组方式;having:having条件;orderBy:排序方式;然而第二种方法仅仅多了一个参数 limit:限制返回的记录的条数
虽然query方法参数多,但是如果你简简单单的要检索全部数据,除了表名其他参数都可以为空
这里说一下这个返回值,返回值类型是一个Cursor类型,使用方法比较复杂,也比较烦,网上有些博客介绍的方法,先moveToFirst(),然后while(cursor.moveToNext){} 这种方式在我做项目的时候出现过一些问题,就是第一条自动给pass了,所以我一般采用do{}while(cursor.moveToNext)

Cursor cursor = database.query(LocalDataHelper.detail_customer_table,null,null,null,null,null,null);

    List<Map<String,String>> list = new ArrayList<>();
    cursor.moveToFirst();
    if (cursor.getCount() != 0){   //判断cursor有多少个数据,如果没有就不要进入循环了
      do {
          String id = cursor.getString(cursor.getColumnIndex("id"));
          String name = cursor.getString(cursor.getColumnIndex("name"));
          String phone = cursor.getString(cursor.getColumnIndex("phone"));
          String createTime = cursor.getString(cursor.getColumnIndex("createTime"));
          Map<String,String> map = new HashMap();
          map.put("id ",id ); 
          map.put("name ",name ); 
          map.put("phone ",phone ); 
          map.put("createTime ",createTime ); 
          list.add(map);
         }
      }while(cursor.moveToNext());
    }

Cursor的用法比较烦,一般要使用Android封装的API方法去是Cursor移动,首先用moveToFirst()方法移动到第一个的位置,然后用getColumnIndex()方法获取对应字段的索引,在使用getString()方法获取对应索引的值,这才把第一个Cursor里的一个字段拿出来,然后反复用这种方法把所有的字段拿出来之后,调用moveToNext()方法移动到下一个位置,如此循环拿出所有的数据。

简单封装

上面提到的增删改查方法的封装,如果大家有兴趣,可以根据个人需要封装,通常我都是根据实际情况进行封装,例如这样:

    /**
     * 查询信息
     * @param db SQLiteDatabase 
     * @param table 表名
     * @return  查询出来的Cursor
     */
    public Cursor query(SQLiteDatabase db, String table){
        return db.query(table,null,null,null,null,null,null);
    }

把这个方法放到自定义的SqliteOpenHelper里,这样调用的时候,就不用去写那么一堆null了,还可以在外面注释上参数都是什么,提升代码的整洁性。

Cursor cs  = helper.query(database,LocalDataHelper.detail_customer_table);
安卓微信本地数据库解密 安卓微信数据库解密 阅读详情

相关推荐

Android数据库:SQLite除了.db文件,还多出.db-shm,.db-wal文件

Android数据库:SQLite除了.db文件,还多出.db-shm,.db-wal文件 使用安卓数据库保存文件时,在Android Studio 的 Device File Explorer里数据库文件目录 /data/data/com.urovo.datatopc/databases/DATA.db 发现其目录下不仅有.db文件,还有两个其他文件 .db-shm和.db-wal文件 而且数据库存储文件DATA.db(这是我的数据库名字,你们的可能不一样)保存至本地,通过SQLite Develope

m0_53581523的博客 4942

Android之 常用数据库框架整理

4.2 ORM 框架,即 Object-Relational Mapping,它的作用是在关系型数据库和对象之间作一个映射,这样,我们在具体操作数据库的时候,就不需要再去和复杂的 SQL 语句打交道,只是像平时操作对象一样操作它就可以了。在数据库方面,它是主键。DaoSession还提供了一些通用的持久性方法,如实体的插入,加载,更新,刷新和删除。3.2 SQLiteOpenHelper的使用,自定义DatabaseHelper,继承SQLiteOpenHelper,来管理数据库的创建和数据库表的创建。

hdulhb的博客 6017

安卓db数据库查看工具——快速管理与分析SQLite数据库

SQLite 是 Android 内置的轻量级关系型数据库管理系统,为 Android 应用提供了一种高效、便捷的数据持久化方案。与传统的关系型数据库不同,SQLite 将数据库存储在文件系统中的单一文件内,从而简化了数据库的部署和管理。SQLite 支持标准的 SQL 语言,允许在没有服务器进程的情况下进行数据库操作,这使得它非常适合于资源有限的移动设备环境。在 Android 应用开发中,SQLite 数据库常用于本地数据存储、用户个性化设置记录以及应用内缓存。

weixin_32869687的博客 1946

Android开发——SQLite数据库的使用

在Android中应用程序需要处理大量并发连接、高并发读写等高负载场景,SQLite可能会表现出性能瓶颈,不如传统的关系型数据库管理系统(RDBMS),因此不建议在这些场景中使用SQLite。SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。我们先需要建立一个数据库对象,以读的方式打开,并指定数据库的位置。在onCreate方法里面,防止第一次点击的时候,没有user.db这个文件,因此写了一个创建db文件的代码。当表头为null的时候为全部读取。

Krisit的博客 5333

超详细Matlab R2021a免费安装教程(附安装包)

Matlab是一种高级技术计算语言和交互式环境,用于算法开发、数据可视化和数值计算。它集成了数学、工程和科学计算的丰富函数库,提供了强大的数据分析和绘图工具。Matlab还支持并行计算和大规模数据处理,适用于各种领域,如信号处理、图像处理、控制系统、机器学习等。

waicsdn_haha的博客 1万+

Tessent MBIST SDC

主要是两个PROC,tessent_constrain_${design_name}_mentor_ijtag_non_modal和tessent_constrain_${design_name}_mentor_memory_bist_modal。其中,Memory/MBIST controller/MEM Interface可以从func_clk_1来(用func_clk_1和func_clk_2的高频时钟),如图中红色线。其中,SIB和BAP用ijtag_tck的clock,如图绿色线。

po_poo的博客 1990

Android 进阶 1、sqlite数据库

在这个位置我们可以打开cmd,然后输入sqlite3,就可以执行一个命令行的数据库操作器,要注意的是他的一些命令是不一样的,跟其他的数据库比较起来,他创建或者打开数据库使用的是.open,在每一个关于数据库命令下面,都需要在前面加上一个点号,而在每一个sql命令下面都需要在后面加上一个分号;这个子类需要创建数据库和继承父类的构造方法,首先需要写一个构造方法,将上下文传进去,super一下父类的构造方法,然后就是接口方法oncreate,在里面执行创建数据表的sql命令;

aiwanchengxu的博客 3863

C#---第十一课:对列表的各种操作,添加、删除、排序、列表长度、获取元素的索引、FirstOrDefault()、SingleOrDefault()、last()

1.添加元素 2.删除元素 (1)删除列表中指定的元素 (2)删除列表A中所有与列表B相交的元素---常规 (3)删除列表A中所有与列表B相交的元素---lambda 3.排序(正序、倒序) 4.获取列表的最大容量(长度)、已用容量 6.获取元素在列表中的位置(index) 7.判断某元素是否在列表List中 8.获取列表中第一个元素First() & FirstOrDefault() 9.获取列表中唯一元素Single() & SingleOrDefault() 10.获取列表中最后一个元素

Alien-Hu 3627

Android数据库基础

原理底层是采用Binder机制为存储和获取数据提供统一接口,实现应用程序间数据共享通过URI可操作不同ContentProvider中数据外部进程可通过ContentResolver类与ContentProvider进行交互进程间数据交互与共享,实现跨进程通信ContentProvider相当于搬运工,真正数据源还是数据库、文件、XML、网络。

zhoujun798的博客 1584

使用Typora时LaTeX内联公式简单汇总

0、前言 在使用Typora写笔记时,有时候需要添加上LaTeX排版的公式。以下是整理出的一份简单笔记,方便记忆不清楚时查阅。笔记暂时不够完善,之后再补充。 注:有些公式语法KateX不能解析,但在Typora中可以使用(不用在意) 1、一些基本内联公式 位置关系 展示 LaTeX 说明 x2x^{2}x2 x^{2} 右上标 x2x_{2}x2​ x_{2} 右下标 2x{}^{2}x2x {}^{2}x 左上标 2x{}_{2}x2​x {}_{2}x 左下标

白白旧维的博客 4445

固定资产报废的损失鉴定怎么做?

在社会生产的日常中,企业经常会遇到固定资产报废的损失鉴定,那么怎么去做鉴定?哪些情况下能申请固定资产报废损失鉴定呢? 今天,华碧鉴定就和大家说一说固定资产报废损失鉴定那些事儿。 符合下列条件之一的固定资产可申请报废: 1、使用年限过长,功能丧失,完全失去使用价值,或不能使用并无修复价值的; 2、产品技术落后,质量差,耗能高,效率低,已属淘汰且不适于继续使用,或技术指标已达不到使用要求的; 3、严重损坏,无法修复的或虽能修复,但累计修理费已接近或超过市场价值的; 4、主要附件损坏,无.

weixin_50362670的博客 2117

android 数据库基础用法

package cn.itcast.sqlite; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class DBOpenHelper extends SQLiteOpen

枫叶 641

RKNN3588——YOLOv8的PT模型转RKNN模型

1. 首先克隆rknn修改后的ultralytics版本项目到本地主要是修改了源码的ultralytics/nn/modules/head.py和ultralytics/engine/exporter.py两个文件。2. 使用修改后的ultralytics对pt模型进行模型转换,此处的format=rknn代表支持rknn后续的转换,而不是用onnx,一定要注意!!!

张飞飞的博客 7180

Android Architecture Components 之 Room 篇,安卓binder机制详解

// Test helpers for Room testImplementation “android.arch.persistence.room:testing:1.0.0” 基本使用 Room 主要包含三个组件: Database: 包含数据库持有者,作为与应用持久化相关数据的底层连接的主要接入点。这个类需要用 @Database 注解,并满足下面条件: 必须是继承 RoomDatabase 的抽象类 注解中包含该数据库相关的实体类列表 包含的抽象方法不能有参数,且返回值必须是被 @Dao 注解的类

m0_64382743的博客 209

【NI Multisim 14.0原理图设计基础——元器件分类】

电阻(RESISTOR):该元器件栏中的电阻都是标称电阻,是根据真实电阻元器件而设计的,其电阻值不能改变。 排阻(RESISTOR PACK):相当于多个电阻并列封装在一个壳内,它们具有相同的阻值。 电位器(POTENTIOMETER):即可调电阻,可以通过键盘字母动态调节电阻,大写表示增加电阻值,小写表示减小电阻值,调节增量可以设置。 电容(CAPACITOR):所有电容都是无极性的,不能改变参数,没有考虑误差,也未考虑耐压大小。 电解电容器(CAP_ELECTROLIT):所有电容都是有极性的,“+”极

RL2698853114的博客 4万+

学 Simulink—— 基于高频方波电压注入的表贴式永磁电机无感控制仿真

本文手把手教授基于Simulink的高频方波电压注入法实现表贴式永磁同步电机(SPMSM)无传感器控制。针对表贴式电机微弱凸极特性(Lq/Ld≈1.05-1.15),详解方波注入相比正弦注入的优势:通过5kHz方波(PWM频率半值)集中能量提升信噪比,并采用相邻周期电流直接相减的零延迟分离技术。系统架构包含高频注入器、无滤波器信号分离模块、锁相环观测器和磁饱和极性辨识等关键环节,提供参数设置经验(如注入幅值10-15%Vdc)和典型性能指标(位置误差<0.2rad)。特别强调工程实现要点:PWM同步时

xiaoheshang_123的博客 168

android实现mysql数据库存储_Android开发--数据存储之数据库操作

简介:SQLite的介绍:SQLite数据库属于文本型的数据库,它是以文本的形式来保存的。Android提供了对SQLite 数据库的完全支持,应用程序中的任何类都可以通过名称来访问任何的数据库,但是应用程序之外的就不能访问。建议创建一个新的数据库的方式就是创建一个子类继承 SQLiteOpenHelper 然后重写它的 onCreate()方法,这样就可以在数据库中执行 SQLite的语法命令来...

weixin_30582943的博客 556

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

安卓数据存储(键值对、数据库、存储卡、应用组件Application、共享数据)

介绍安卓数据存储的几种常用方式包括键值对、数据库、存储卡、应用组件Application、共享数据等

weixin_42369301的博客 1496

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Android笔记——Day5 *SQLite基本用法*Broadcast广播机制

//本文中代码基本上是Mars老师的代码...--#     1、SQLite基本用法 参考:http://my.oschina.net/cathleencheng/blog/17682 ··SQLite是一种轻量级的数据库,时常用于嵌入式开发。 ··对于数据库的基本操作有: 1)创建数据库。包括创建表,记录,字段等。 2)打开,关闭数据库。 3)向数据库中插入数据。 4)删除

hyjzcy的专栏 523

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Android Room 持久化库:简化数据库操作

Room 是 Google 官方推出的一个 SQLite 对象映射库,它是 Android Jetpack 组件的一部分。Room 在 SQLite 的基础上提供了一个抽象层,让开发者能够更流畅地访问数据库,同时又能充分利用 SQLite 的全部功能。Room 的主要优势在于:编译时 SQL 查询验证减少了大量样板代码与 LiveData、RxJava 等无缝集成提供了简单的注解方式来定义数据库结构。

专注于移动开发的干货分享。提供高效解决方案、避坑指南与前沿技术解析。为开发者创造价值。 571

Android笔记——Day5 *SQLite基本用法 *Broadcast广播机制 *WiFi基础

//本文中代码基本上是Mars老师的代码...--#     1、SQLite基本用法 参考:http://my.oschina.net/cathleencheng/blog/17682 ··SQLite是一种轻量级的数据库,时常用于嵌入式开发。 ··对于数据库的基本操作有: 1)创建数据库。包括创建表,记录,字段等。 2)打开,关闭数据库。 3)向数据库中插入...

QCheng 279

android中的数据库操作

android中的数据库操作       android中的应用开发很难避免不去使用数据库,这次就和大家聊聊android中的数据库操作。   一、android内的数据库的基础知识介绍          1.用了什么数据库             android中采用的数据库是SQLite这个轻量级的嵌入式开源数据库,它是用c语言构建的。相关简介可

small5e4444的专栏 813

如何用Sprinkles快速构建Android数据库应用:零基础入门指南

Sprinkles是一个专为Android应用设计的数据库操作简化库,它能帮助开发者减少大量模板代码,让SQL数据库操作变得更加简单高效。无论是数据插入、更新还是查询,Sprinkles都能提供直观的API,特别适合零基础开发者快速上手Android数据库开发。 ## 📌 为什么选择Sprinkles? 在Android开发中,处理SQLite数据库通常需要编写大量重复代码,从创建表结构到数

gitblog_00309的博客 402

查看安卓sqlite数据库工具:Android-Debug-Database

简要介绍 安卓开发过程中,有时需要查看sqlite数据库,核对数据.本文介绍Android-Debug-Database,非常好用. github地址:https://github.com/amitshekhariitbhu/Android-Debug-Database 功能: 支持查看手机该app的数据库和shared preference. 支持修改数据库和shared preferenc...

蓝不蓝编程 1524
上一篇: Android检测网络类型
下一篇: Android学习(一)——四大组件之Activity
豪利丶王
博客等级 码龄11年 1粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值