android SQLite数据库使用总结之(一)从加载本地数据库开始

Android-指定路径创建 SQLite 前言 今天大佬让我把创建的数据库存储路径改为 SD 下,自信满满低改了结果崩溃,在此记录一下。 正文 我们创建数据库一般就是集成 SQLiteHelper ,在构造方法把 DB_NAME 传进入,就会默认在 data/data/<`package_name>/database/ 下创建,在里面的文件也相对有安全性,删除应用的时候也会一起删除掉。但是总会遇到不同的需求场景。然... 阅读详情

好久以前就写了,但是一直拖拖拉拉的,在草稿箱里放了两个星期还没写完,想想这样托下去又要废掉了,还是分开来吧,写多少是多少。


android的SQLite数据库简单使用一段时间了,现在想抽些时间总结下,不然总感觉很乱


1、先说一个工具:SQLiteExpert 


SQLite Expert,一款SQLite数据库操作工具,下载地址:http://www.sqliteexpert.com/  ,Personal Edition是免费的,日常使用基本足够,需要专业版的可以自行网上寻找。当然,其他免费的工具还有很多,如:SQLite Database Browser,SQLiteManager等。



2、从加载一个本地数据库开始

假设我们的SDCard的根目录上已经存在一个数据库,名称为:ChinaCity.db。这时候我们可以这样操作:

public void readDataBaseFromSDCard() {
		String dbPath = Environment.getExternalStorageDirectory() + "/ChinaCity.db";
		
		File dbFile = new File(dbPath);
		if (!dbFile.exists()) {
			Toast.makeText(getApplicationContext(), "请先点击拷贝到SDCard", Toast.LENGTH_LONG).show();
			return;
		}
		
		openOrCreateDatabase(dbPath, SQLiteDatabase.CREATE_IF_NECESSARY, null);
		
		SQLiteDatabase db = SQLiteDatabase.openDatabase(dbPath, null, SQLiteDatabase.OPEN_READWRITE);
		// db = openOrCreateDatabase(dbPath, SQLiteDatabase.OPEN_READWRITE, null);
		
		StringBuffer sb = new StringBuffer();
		Cursor cursor = db.rawQuery("select * from china_provinces_code", null);
		while (cursor.moveToNext()) {
			int id = cursor.getInt(cursor.getColumnIndex("_id"));  
	        String name = cursor.getString(cursor.getColumnIndex("name"));  
	        sb.append(id + ":" + name + " \n");
		}
		System.out.println(sb.toString());
	}



先用SQLiteDatabase的一个静态方法openDatabase一个数据库,第一个参数为数据库文件路径,第二个参数一般为null,第三个参数为打开数据库的方式,由于只需要读取数据,所以我们选择SQLiteDatabase.OPEN_READONLY,此种方式的好处是数据库存在的话就不会出错;另外一种为SQLiteDatabase.OPEN_READWRITE,以读写的方式打开。执行上面代码,我们会看与上图信息相同的:


开发的时候,我们可能会需要一些初始化数据,比如城市信息,这样我们就可以事先创建好一个数据库,写入初始数据,将其放入自己的apk中一起分发。这个时候我们就可以直接从资源文件中读取这个数据库文件写入到应用的数据库目录或者SDCard中,然后就可以对其操作,拷贝代码如下:

	/**
	 * 拷贝资源中数据库
	 * @param where 1SDCARD,2LOCAL
	 */
	public void copyDataBase(int where) {
		// 每个应用都有一个数据库目录,他位于 /data/data/packagename/databases/目录下
		String packageName = "com.ttdevs.citydata"; // xml中配置的
		String dbName = "ChinaCity.db";
		String dbPath = null;
		if(where == 1){ // sdcard
			dbPath = Environment.getExternalStorageDirectory() + File.separator + dbName;
		} else { // local
			dbPath = "/data/data/" + packageName + "/databases/" + dbName;
		}
		
		if(where == 2){
			new File("/data/data/" + packageName + "/databases/").mkdirs();
		}

		if ( where == 1 && !Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
		    return ; // 未挂载外部存储,拷贝到内部不用判断
		}
		
		File dbFile =new File(dbPath);
		if(dbFile.exists()){
			dbFile.delete();
		}
		try {
			dbFile.createNewFile();
		} catch (IOException e1) {
			e1.printStackTrace();
			return ;
		}
		
		try {
			InputStream is = getResources().getAssets().open(dbName);
			OutputStream os = new FileOutputStream(dbPath);

			byte[] buffer = new byte[1024];
			int length = 0;
			while ((length = is.read(buffer)) > 0) {
				os.write(buffer, 0, length);
			}

			os.flush();
			os.close();
			is.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
		Toast.makeText(getApplicationContext(), "拷贝成功", Toast.LENGTH_LONG).show();
	}

代码不是很严谨,凑活着看哈。经过以上步骤,我们就可以开始使用数据库,数据库的常用操作,在以后的博客中继续。


ChinaCity.db数据库:下载

Android(安卓)订餐APP(Sqlite数据库,完整的增删改查) Android(安卓)订餐APP(Sqlite数据库,完整的增删改查) 一.背景 首先说说项目的背景,基于地铁口鸡蛋饼的一个小项目,APP中固定设置的鸡蛋饼搭配,顾客也可以自己搭配 二.开发环境 AndroidStudio3.0.1 JDK1.8 语言:JAVA 数据存储:Sqlite 三.功能 注册、登录、管理员、普通用户 首页:鸡蛋饼食材搭配 订单:购买订单展示 ... 阅读详情

相关推荐

Android Studio插件Database Navigation实战:3分钟搞定SQLite数据库连接与查询

本文详细介绍了如何在Android Studio中通过Database Navigation插件快速连接和操作SQLite数据库。文章提供了从插件安装、数据库文件定位到建立连接、执行SQL查询的完整实战指南,旨在帮助Android开发者在3分钟内提升数据库调试与开发效率,避免繁琐的上下文切换。

weixin_29269441的博客 236

【Android studio】批量数据导入到android 本地数据库

android studio中导入大量数据到本地项目原有的数据库中(纯工具操作)

逆流而上 2232

Android平台SQLite数据库可视化查看与编辑工具

SQLite看似简单,实则博大精深。从一个.db文件的二进制布局,到Android中复杂的权限与多用户隔离机制;从基本的CRUD操作,到线程安全与异常处理——每一个细节都在影响着应用的稳定性与用户体验。更重要的是,当你掌握了底层原理,你会发现很多“玄学问题”都有了解释,很多“高级工具”也不再神秘。所以,下次再看到那个静静躺在里的.db文件时,不妨试着问一句:“嘿,兄弟,你想告诉我什么?” 😉本文还有配套的精品资源,点击获取。

weixin_32687875的博客 932

Android 数据储存的方式之本地数据库储存

Android 数据储存的方式有很多种 —— SharedPreferences 储存  、 文件储存 、 数据库储存 、 网络储存(储存到后台网络) ,虽然储存方式那么多,但是这些储存方式也有一定的规律可寻: SharedPreferences :  存储 key value 键值对类型的简单少量的简单数据 (如用户名 ,密码 ,性别,年龄  。。。) 文件 :  没有固定规则的,大量的数据

豆子的博客 2万+

arcgis for android 读取加载sqlite数据库.rar

用“JDBC”连接数据库,arcgis for android 读取空间数据库。

YOLOv8模型RKNN量化策略与RK3588部署实战解析

本文详细解析了YOLOv8模型在RK3588平台上的RKNN量化策略与部署实践。通过对比INT8和FP16量化方式的性能差异,结合实际测试数据,为开发者提供了从模型导出、转换到板端部署的完整解决方案,帮助实现高效的边缘AI应用部署。

oil88的博客 1112

android连接本地数据库sqlite,实现增删改查

Android应用数据存储简单来说有这么几种:文件存储、SharedPreference存储、SQLite数据库存储、网络服务器存储、ContentProvider等。如果需要存储的数据量大的时候,那么使用文件存储会有很大的弊端,例如:你想修改其中很微小的项就要先读取整个文件的内容,修改后再全部保存,非常耗时。SharedPerference大多数用来存储键值对形式的少量数据。所以学习使用SQLite来存储数据还是很有必要的。\ * \ * \ * 初始化数据库。

datian1234的博客 1650

从零实现Unitree Go2的SLAM建图与导航:手把手集成slam_toolbox和nav2(附Rviz2可视化配置)

本文详细指导如何在Unitree Go2四足机器人上集成slam_toolbox和nav2,实现SLAM建图与导航功能。从ROS2环境配置、雷达数据处理到slam_toolbox参数优化,再到nav2路径规划与Rviz2可视化调试,提供完整解决方案。特别适合机器人开发者快速掌握ROS2导航栈在Unitree Go2上的应用实践。

weixin_33737134的博客 1235

Android Studio如何查看自己创建的SQLite数据库

Android Studio如何查看自己创建的SQLite数据库 在学习安卓开发的时候,有时候需要建立一个SQLite数据库,在创建完之后,想要查看的时候你不知道在哪里找,并且有时候找到了也不知道如何查看,现在就让我们来了解一下如何找到并查看安卓里的SQLite数据库,效果如下 下面开始操作 一. 找到SQLite数据库 1.如下图所示找到设备的文件 2.找到对应文件,路径为 /data/data/com.example.fileoperation/databases/test.db 3.现在已经找到它

qq_48736958的博客 2万+

基于4G cat.1的低功耗车牌识别摄像头模组介绍

在消费类摄像头领域,4G低功耗相机已经非常普遍,在可视门锁,婴儿看护,户外监控等领域都获得了很好的应用.但是在工业领域,低功耗相机的应用还不是那么广泛.这里要介绍一款基于4G cat.1的低功耗车牌识别摄像头模组,在待机状态只有MCU和毫米波雷达以1Hz的频率工作,功耗低至500uA,并可以通过4G模块远程唤醒模组.

bindaz的专栏 1651

让 ABAP 内表真正释放内存:从 CLEAR、FREE 到打破 Table Sharing 的实战技巧

ABAP内表内存管理的关键在于理解其运行时结构:DELETE操作仅逻辑删除行而不会释放内存,CLEAR或FREE才能真正回收内存。常见的误区包括误判空表状态和忽视内表共享机制。实际应用中,大表筛选后应采用VALUE表达式或逐行插入方式重建表体以释放内存。典型案例显示,正确处理内表内存可显著降低SAP Gateway和批处理程序的内存消耗,提升系统稳定性。开发时需结合调试工具观察内存状态,避免因共享机制导致无效回收。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 325

Android studio引入外部SQLite数据库,获取数据库列表数据

Android studio引入外部SQLite数据库,获取数据库列表数据

NXBBC的博客 1万+

python实现Markowitz模型 (附完整源码)

python实现Markowitz模型 (附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 407

android中滑动SQLite数据库分页加载

今天用到了android中滑动SQlit数据库分页加载技术,写了个测试工程,将代码贴出来和大家交流一下: MainActivity package com.example.testscrollsqlite; import java.util.ArrayList; import android.app.ActionBar.LayoutParams; import android.app.A

水寒 7128

大数据开发工程师必备面试题与解答

大数据开发岗位一直是互联网行业的热门方向,面试过程中既考察基础知识,也关注实际项目经验和问题解决能力。本文整理了等核心组件相关的高频面试题及参考解答,帮助大家高效准备面试。大数据面试不仅考察基础理论,更看重项目经验与问题解决能力。本文涵盖了等核心知识点及调优思路,希望能帮助你在面试中游刃有余。

X2829352498的博客 305

Obsidian与RAG:知识管理的未来之战

摘要: 本文对比了传统RAG、Obsidian和llm-wiki-skill三种知识管理方案。传统RAG依赖查询时临时检索,知识无法积累;Obsidian需人工整理,成本高但结构化强;llm-wiki-skill通过AI在摄入时自动编译知识为结构化Wiki,实现持续增值。核心差异在于知识处理时机——llm-wiki-skill将"查询时检索"转变为"摄入时编译",通过三层Markdown结构(sources/concepts/entities)和自动双向链接构建可进化

ZhangJiqun&191cm&85kg 632

WPF中使用SqLite数据库

在研究安卓手机与pc电脑使用数据线进行数据传输的过程中(为啥这么二,因为甲方人员不允许使用互联网,就算是内部的局域网wifi都不可以),涉及到了WPF操作安卓常用数据库SqlLite的操作,记录一下艰辛的历程。 直接使用sqLite官方的dll进行二次开发 首先在官网中SqLite官网中下载sqlite-netFx20-setup-x86-2005-1.0....

war3ismylove的博客 1万+

【Verilog基础】CDC跨时钟域方法,典型异步电路设计之脉冲同步器(上)

【Verilog基础】CDC跨时钟域方法,典型异步电路设计之脉冲同步器(上):慢时钟域到快时钟域!

悟已往之不谏 知来者之可追 1547

android程序db文件用什么编辑器,在 Android Studio 上调试数据库 ( SQLite )

以前 Eclipse 时代,调试 SQLite 都是将数据库文件导出到电脑,然后再用软件打开查看。现在我们用 Android Studio,有没有更方便的方法呢?SQLScout安装SQLScout 是一个 Android Studio 的插件,通过点击:Setting —> Plugings —> Browse Repositories搜索 SQLScout 安装即可。要是下载不动,...

weixin_33344952的博客 910

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

安卓 SQLite 基础知识(一)

Android 可能是本十年的热词。在短短的时间内,它已经占据了大部分手机市场。Android 计划在今年秋天通过 Android L 版本接管可穿戴设备、我们的电视房间以及我们的汽车。随着 Android 的快速增长,开发人员也需要提升自己的技能。面向数据库的应用程序开发是每个开发人员都应该具备的关键技能之一。应用程序中的 SQLite 数据库是数据中心产品的核心,也是构建优秀产品的关键。理解 SQLite 并实现 Android 数据库对一些人来说可能是一个陡峭的学习曲线。

龙哥盟 1017

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

android读取db文件格式,android:sqlite的使用(读取res/raw的db文件)一种方法

1、android:sqlite的使用(读取res/raw的db文件)一种方法public static final StringDATABASE_FILENAME= "stock.db";// 这个是DB文件名字public static final StringPACKAGE_NAME= "com.huaxa.it.tuling";// 这个是自己项目包路径public static fina...

weixin_39724382的博客 831

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Rome noGlobalObjectCalls 规则详解:禁止将全局对象当作函数调用

本篇技术指南围绕 Rome 的 `noGlobalObjectCalls` 规则展开,系统讲解它为什么禁止调用 `Math`、`JSON`、`Reflect`、`Atomics`、`Intl` 这五个全局对象、背后对应的 ECMAScript 规范依据、规则的实际诊断行为(含普通调用与 `new` 调用),并结合仓库源码剖析其基于语义模型的检测原理与测试覆盖。读完本文,你将清楚理解该规则的触发条件

gitblog_00562的博客 682

Android 使用SQLite数据库

Android 往SQLite数据库中存放类,更简单的使用数据库存储功能

qq_38174131的博客 6525
上一篇: 自定义listview,带按钮,多选框,处理item事件
下一篇: android SQLite数据库使用总结之(二)创建自己的数据库
ttdevs
博客等级 码龄15年 388粉丝 91原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值