Android中SQLite使用

Android——SQLite数据库使用详解,安卓开发面试基础 设置按钮边框填充颜色 阅读详情

Android sdk是自带数据库的,我们使用时需要继承SQLiteOpenHelper.java抽象类即可!

1.首先创建个SQLiteHelper来继承抽象类:

class SQLiteHelper(var context: Context?, name: String?, factory: SQLiteDatabase.CursorFactory?, version: Int) : SQLiteOpenHelper(context, name, factory, version) {

 private val sql="create table if not exists collect("
            + "id integer primary key autoincrement,"
            +"author text,"
            +"price real,"
            +"pages integer,"
            +"name text)"

    override fun onCreate(db: SQLiteDatabase?) {
        db!!.execSQL(sql)
    }

    override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
        db!!.execSQL("drop table if exists collect")
        onCreate(db)
    }
}

2.接下来去使用它,在使用之前记得授权读写权限

class MainActivity : AppCompatActivity(), View.OnClickListener {

    private var dbHelper: SQLiteHelper? = null
    private var databaseContext: DatabaseContext? = null
    private val TABLE_NAME = "collect"
    private val DATA_BASE = "CollectStore.db"
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        //运行时权限
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            val perms = arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE)
            if (checkSelfPermission(perms[0]) == PackageManager.PERMISSION_DENIED && checkSelfPermission(perms[1]) == PackageManager.PERMISSION_DENIED) {
                requestPermissions(perms, 200)
            }
        }
        init()
    }

    private fun init() {
//        databaseContext = DatabaseContext(this)  指定存储路径
        dbHelper = SQLiteHelper(this, DATA_BASE, null, 1)

    }


    override fun onClick(v: View) {
        when (v.id) {
            R.id.btn_create ->
                dbHelper!!.writableDatabase //创建成功后就不会重复创建;
            R.id.btn_add -> {
                val db = dbHelper!!.writableDatabase
                val values = ContentValues()
                var i = 0
                while (i < 10) {
                    values.clear()
                    values.put("author", "范冰冰$i")
                    values.put("price", 188.88)
                    values.put("pages", 120)
                    values.put("name", "洪金宝$i")
                    i += 2
                }
                Toast.makeText(databaseContext, "添加成功!", Toast.LENGTH_SHORT).show()
            }

            R.id.btn_update -> {
                val db2 = dbHelper!!.writableDatabase
                val contentValues = ContentValues()
                contentValues.put("price", 12.99)
                db2.update(TABLE_NAME, contentValues, "author=?", arrayOf("范冰冰0"))
                Toast.makeText(databaseContext, "修改成功!", Toast.LENGTH_SHORT).show()
            }
            R.id.btn_delete -> {
                val db3 = dbHelper!!.writableDatabase
                db3.delete(TABLE_NAME, "author=?", arrayOf("范冰冰0"))
                Toast.makeText(databaseContext, "删除成功!", Toast.LENGTH_SHORT).show()
            }
            R.id.btn_query -> {
                val writableDatabase = dbHelper!!.writableDatabase
                val cursor = writableDatabase.query(TABLE_NAME, null, null, null, null, null, null)
                val list = ArrayList<DataBean>()
                while (cursor.moveToNext()) {
                    val dataBean = DataBean()
                    val author = cursor.getString(cursor.getColumnIndex("author"))
                    val price = cursor.getDouble(cursor.getColumnIndex("price"))
                    val pages = cursor.getInt(cursor.getColumnIndex("pages"))
                    val name = cursor.getString(cursor.getColumnIndex("name"))
                    dataBean.author = author
                    dataBean.price = price
                    dataBean.pages = pages
                    dataBean.name = name
                    list.add(dataBean)
                    Log.i("8888888", author + "---" + price + "---" + pages + "---" + name)
                }
                cursor.close()
            }
            else -> {
            }
        }
    }

    override fun onDestroy() {
        super.onDestroy()
        val db = dbHelper!!.getWritableDatabase()
        db.close()
    }
}

3.如上写了 增、删、改、查操作

这时候我们想要从设备上找到我们创建的数据库是找不到的,要root权限

因此需要我们自定义路径,我创建了DatabaseContext.java这个类

public class DatabaseContext extends ContextWrapper {

    private Context mContext;

    public DatabaseContext(Context context) {
        super(context);
        this.mContext=context;
    }

    /**
     * 获得数据库路径,如果不存在,则创建对象对象
     *
     * @param name : CollectStore.db
     */
    @Override
    public File getDatabasePath(String name) {
        //判断是否存在sd卡
        boolean sdExist = Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState());
        if (!sdExist) {//如果不存在,
            Log.e("SD卡管理:", "SD卡不存在,请加载SD卡");
            return null;
        } else {
            String path = mContext.getExternalFilesDir(null).getAbsolutePath();
//            String path = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + getPackageName();
            File dirFile = new File(path);
            if (!dirFile.exists()) {
                dirFile.mkdirs();
            }
            boolean isFileCreateSuccess = false;
            //判断文件是否存在,不存在则创建该文件
            File dbFile = new File(path + File.separator + name);
            if (!dbFile.exists()) {
                try {
                    boolean newFile = dbFile.createNewFile();
                    isFileCreateSuccess = newFile;
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } else {
                isFileCreateSuccess = true;
            }

            //返回数据库文件对象
            if (isFileCreateSuccess) {
                return dbFile;
            } else {
                return null;
            }
        }
    }

    /**
     * 重载这个方法,是用来打开SD卡上的数据库的,android 2.3及以下会调用这个方法。
     *
     * @param name
     * @param mode
     * @param factory
     */
    @Override
    public SQLiteDatabase openOrCreateDatabase(String name, int mode,
                                               CursorFactory factory) {
        SQLiteDatabase result = SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name), null);
        return result;
    }

    /**
     * Android 4.0以上会调用此方法获取数据库。
     */
    @Override
    public SQLiteDatabase openOrCreateDatabase(String name, int mode, CursorFactory factory,
                                               DatabaseErrorHandler errorHandler) {
        SQLiteDatabase result = SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name), null);
        return result;
    }

调用后就可以看到数据库文件了

注释:witableDatabase内部调用了openOrCreateDatabase,可以不用重写该方法

最后附上数据库图片,亲测可用

 

eg: https://blog.youkuaiyun.com/mfysss/article/details/128059700

Android之SQLite数据库及SQLiteStudio工具的使用,安卓framework开发书籍 //数据库升级时调用此方法 @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } } 在MainAcivity中声明一个SQLiteDatabase对象,用于创建数据库对象 private DatabaseHelper databaseHelper; //用于创建帮助器对象 private SQLiteDatabase db; //用于创建数据库对象 public void cre 阅读详情

相关推荐

金蝶ERP元数据解析:字段属性与表结构映射实战

本文深入解析金蝶ERP元数据的核心价值与应用实践,详细介绍了字段属性与表结构映射的关键技术。通过缓存获取与工具类直连两种方案对比,结合实际案例展示元数据在数据库校验、动态表单生成等场景的应用,帮助开发者高效解决二次开发中的常见问题。

weixin_33738555的博客 432

android sqlite datadata 在哪里,什么是在Android中使用SQLiteDatabase.CursorFactory?

我已经通过扩展SQLiteOpenHelper类创建了一个数据库。它的创建也。这是我粘贴的代码public Imagehelper(Context context) {super(context, DATABASE_NAME, null, SCHEMA_VERSION);cntxt = context;filename = Environment.getExternalStorageDirecto...

weixin_39636411的博客 383

从零到精通:ROS2 MoveIt2与MPC机械臂轨迹规划的完整配置流程

本文详细介绍了ROS2 MoveIt2与MPC机械臂轨迹规划的完整配置流程,从环境准备到高级功能扩展,帮助开发者实现精准控制。通过集成模型预测控制(MPC),机械臂能够优化复杂轨迹规划,处理动态避障,提升工业自动化效率。

juice的博客 705

安卓数据库——SQLite的应用(SQLiteDatabase类)

** 概述——SQLite是什么? SQLite是Android开发中常用到的一种数据库。 在android studio中,开发者将sqlite的相关方法封装成了SQLiteDatabase类,通过调用这个类来实现对SQLite数据库的操作。 ** 详解——SQLiteDatabase类: SQLiteDatabase类是用来对数据库进行操作的,比如创建或打开数据库,对数据库中的数据进行增删查改...

Sixyeah的博客 1392

Cadence公司的数字IC设计工具:综合工具(Genus)——(2)

介绍Cadence公司的数字IC设计工具Genus

qq_42922513的博客 1943

运维与软件实施课表

运维与软件实施课表 课程 章节编号 章节 课程地址 软件及操作系统基础 ch01 软件及操作系统基础01 实施、运维工程师基本技能:https://blog.csdn.net/qq_28189423/article/details/82700539 老毛桃制作winPE镜像:https://blog.csdn.net/qq_2818942...

Mr.O~的博客 1万+

Android-Sqlite数据库

Android-Sqlite数据库 本文使用Sqlite数据库,主要使用DatabaseHelper对数据库库表文件进行创建,使用DBManger对数据进行操作。 1.DatabaseHelper初始化 初始化部分放到了Application中实现。创建一个静态变量 /** 数据库Helper对象* */ public static DatabaseHelper databaseHelp...

dream_xang的博客 389

火山引擎实时对话AI实战:5分钟搞定WebRTC+大模型+ASR/TTS全链路集成

本文详细介绍了如何利用火山引擎的实时对话AI解决方案,快速集成WebRTC、大模型、ASR和TTS服务,构建低延迟、高保真的实时语音对话应用。通过实战代码示例,从环境准备、音频流管理到全链路串联与性能优化,为开发者提供了一套端到端的集成指南,适用于智能客服、在线教育等互动场景。

weixin_29051245的博客 1126

SQLite数据库精炼详解

一、前期基础知识储备 Android本地化存储三种方式: ①文件存储,存储简单二进制数据和文本数据; ②SharedPreference存储,键值对存储,存储数据类型多样,存储方式单一; ③SQLite数据库存储,Android内置数据库,存储复杂关系型数据,质的飞跃。 SQLite正式发布于2000年,现在Android内置的是SQLite3.0。占用几百KB资源,但运算速度飞快,非常适合在移动...

Chin_Style的博客 706

树莓派4B:控制步进电机

文章目录准备阶段接线阶段树莓派程序 准备阶段 准备以下物品,淘宝都可以买到: 57步进电机 电源开关(220v转24v,3A,72W) 步进电机驱动器 电源线 电线 杜邦线 树莓派4B一套 具体型号如下: 接线阶段 整体:接线效果如下图 电源开关起220v转24v作用,很好接线,输出24v接入步进电机驱动器 步进电机驱动器的 A+ A- B+ B- 按提示接步进电机四线,步进电机上就会有说...

学习路上的鸭子的博客 1万+

【2026年华为暑期实习/秋招(AI)-8月5日-第一题- 选择题】(题目+思路+Java&C++&Python解析+在线测试)

摘要: 本文包含20道选择题,涵盖深度学习、数值计算、概率统计、线性代数及机器学习等领域。重点考察了Softmax的数值稳定性实现(减去最大值)、视觉问答任务(图像+问题→答案)、分层强化学习的奖惩计算、欧氏距离与余弦相似度、反向传播梯度计算、SVD降维存储优化、贝叶斯概率推断、插值多项式等。此外,涉及逻辑回归评价指标(不含MSE)、端侧推理内存因素(中间激活)、集中趋势度量(均值)、Householder变换性质、早期停止正则化、梯度矩阵秩与优化、在线学习特性及大模型训练技巧(如学习率预热、梯度裁剪)等知

m0_73659489的博客 190

Android中使用SQLiteDatabase对数据库进行操作

SQLiteDatabase 提供了如下静态方法打开一个文件对应的数据库: static SQLiteDatabase openDatabase(String path, SQLiteDatabase.CursorFactory factory , int flags) : 打开path文件所代表的SQLite数据库 static SQLiteDatabase openOrCreate

小夜的博客 1万+

【BIM入门实战】Revit创建地形的几种方法及优缺点

Revit在体量和场地选项卡的【地形表面】工具可以创建三维地形,有三种方法:放置点、指定点文件和导入实例文件、倾斜摄影点云技术和InfraWorks地形生成。 文章目录1. 放置点2. 指定点文件3. 导入实例文件4. 倾斜摄影点云技术5. InfraWorks地形生成 1. 放置点 放置点功能位于体量和场地选项卡下地形表面,点开找到放置点,并通过自定义设置点的高程值来创建地形的高程数据。 优点:通过用户自定义高程点来绘制模型,使地形更为精确。 缺点:只适用于面积小的项目,面积太大,人工效率低下。 .

智慧空间实验室 4757

android指定sqlite路径_Unity 安卓+sqlite路径

Path ="URI=file:"+ Application.streamingAssetsPath+"/DB/mydb.db";Path ="Data Source="+ Application.streamingAssetsPath+"/DB/mydb.db";Path ="Data Source="+ Application.persistentDataPath+"/DB/mydb.db";...

weixin_42706667的博客 302

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Android使用sqlite期末项目,安卓项目-利用Sqlite数据库,开发新闻发布系统

本教程致力于程序员可以快速的学习安卓移动端手机开发.适合于已经习得一种编程语言的同仁.更多志同道合,想要学习更多编程技术的大神们.小弟不才,麻烦关注一下我的今日头条号-做全栈攻城狮.本文章是基于上篇文章基础之上进行深入学习的.程序员带你学习安卓开发-XML文档的创建与解析sqlite数据库是在安卓中使用较广泛的数据库.其为简单、轻巧的sql类文件型数据库.因以简单的文本形式保存,所以安全性不是很高...

weixin_34640289的博客 848

OV9734 DATASHEET,完整规格书

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

android sqlite 单例模式,安卓SQLite基础使用指南

零、前言[1]熟悉MySQL的学这个就像会西瓜的人去学吃哈密瓜一样简单。[2]如果对MySQL不太熟悉的童鞋,可以看一下我的这篇:SpringBoot-14-MyBatis预热篇,MySQL小结[3]SQLite:安卓内置轻量级的关系型数据库[4]强烈建议语句什么的提前写好,在MySQL上测试一下,不然少个分号,多个逗号什么的就呵呵了[5]安卓有API支持数据库操作,但感觉不怎么灵活,感兴趣的可以...

weixin_33873297的博客 352

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

轻型数据库SQLite与Android实例

SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两

ITSource的专栏 1457

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

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

蓝不蓝编程 1518

【Android-基础】使用安卓sdk自带的sqlite3用命令行管理sqlite文件

方式一:用cmd打开: 1、找到sdk的目录 2、打开cmd 3、打开sdk目录下的platform_tools文件夹 4、该文件下有adb.exe文件,这个就是我们用的东西 5、既然是adb.exe那么此时电脑必须启动一个模拟器 6、打开cmd 7、用cmd的cd命令,将位置跳转到platform_tools文件夹下 8、输入adb shell 9、进入shell后,输入sqlite3即可进入 方式二:直接打开: 1、找到platform_tools文件夹 2、双击打开该文件下sqlite3.exe即可。

无趣的博客 702

安卓中SQLite的学习笔记

当我们存储的数据比较多的时候,我们就应该用到数据库了。在安卓中集成了SQLite数据库,这里简单的介绍下SQLite的使用。 a.SQLite的特点: 1.最大支持2TB的数据存储(这已经非常大了,相对于智能手机而言,因为我们的手机现在存储还停留在几百GB的水平,等到手机能存储几TB的时候,说不定SQLite就能存储更大的数据了) 2.占用资源非常少,大概在250KB左右,着相对于现在智能手

Freedom! 521

Android Studio 安卓sqlite数据库查询

注意 查询安卓sqlite数据库时,确定已经创建了数据库,并且配置了adb命令系统环境,同时查询设备需要root权限,这里我用安卓虚拟机APls(自动开放权限)作为演示 步骤 打开虚拟机,输入adb shell su获取超级管理员 cd命令进入/data/data/包名/databases ls查看当前目录下文件 键入sqlite3后面加上数据库名,再用.tables查看数据库中的表(_metadata是数据库自动生成的,用.schema可以查看建表语句,.exit退出控制台) sqlite&

nine_dollar的博客 2507

安卓Android本地Sqlite实现注册账号和登录功能

实现了注册账号时将数据写入本地SQLite,登录账号时从本地SQLite匹配数据,并有记住密码功能,以及通过改密口令(类似于密保问题)修改密码的功能 思路很简单,登录账号的时候,先去数据库匹配账号,如果匹配到了相同账号,再去匹配同一行的密码,匹配成功则登录成功,匹配不成功则登录失败。如果没有匹配到账号,则也是登录失败。 注册账号的时候,先去匹配账号是否存在,如果账号存在,则提示账号已经存在,如

lifeclass的博客 1万+

SQLite—安卓数据库的使用

在每一个的开发语言中,都会用到一个储存数据的数据库,今天我们就来聊一聊关于android的SQLite数据库的创建和使用。 SQLite数据库是我们的安卓手机自带的一个数据库,所有我们在使用的时候不需要和MySQL那样去创建数据库,而是直接操作手机提供的数据库即可 首先我们要先认识一下我们的SQL语句 SQLite的语句和MySQL的语句都是一样的,所以有JAVA基础的就可以直接略过这一段了 创建...

weixin_45189502的博客 499

[安卓]使用SQLite的标准步骤

简述: 在安卓开发中,我们经常使用本地数据库存取用户的信息,可以用SharePreference的方式轻量级地存储用户的设置信息,同时也能用安卓本身提供的SQLite数据库存储一些数据量较大的数据。本文将介绍个人比较喜欢的一种使用SQLite的流程。 数据操作:增、删、查、改 类:MainActivity、数据JavaBean、DbManager、Constant常数

rootlh的博客 589

android mysql sqlite_安卓 SQLite数据库操作实例

前段时间写了个安卓平台下SQLite数据库操作的实例 ,一直没得时间总结 ,今天把它弄出来了。在Android 运行时环境包含了完整的 SQLite。首先介绍一下SQLite这个数据库:SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持W...

weixin_34450486的博客 307

安卓 sqlite数据存入mysql_android SQLite数据库存储

SQLite最大的特点是你可以把各种类型的数据保存到任何字段中,而不用关心字段声明的数据类型是什么。例如:可以在Integer类型的字段中存放字符串,或者在布尔型字段中存放浮点数,或者在字符型字段中存放日期型值。但有一种情况例外:定义为INTEGERPRIMARYKEY的字段只能存储64位整数,当向这种字段保存除整数以外的数据时,将会产生错误。另外,SQLite在解析CREATETAB...

weixin_42549496的博客 215
上一篇: Android 读取assets中json文件
下一篇: v3签名key和v2还有v1有什么区别
JerryQuary
博客等级 码龄9年 24粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值