安卓数据库的使用方式
简介
该博客主要是为安卓数据库开发做的笔记,该笔记肯定有很多不完善的地方,希望dalao们及时指正,不胜感激。该笔记很大程度上参考了《第一行代码》第二版,很多细节大家可以参考书籍,本笔记主要是一个总结。
SQLiteOpenHelper
类的简介
SQLiteOpenHelper用于创建和升级数据库。在安卓的数据库系统中,一旦创建了一个数据库的表,那么这个表会一致存在于应用的文件夹中,除非程序被卸载。这是一个抽象类,一般我们需要继承并实现这个抽象类。该类有两个核心的函数:onCreate()
和onUpgrade()
。前者用于创建数据库,后者用来更新数据库。一旦数据库的表创建后,就不能随便更改格式,除非卸载这个表并重新建立,或者使用onUpgrade()
函数更新表的结构。
构造函数
假设myDataBaseHelper
这个类继承了SQLiteOpenHelper
:
public class myDataBaseHelper extends SQLiteOpenHelper{}
那么我们需要在构造函数中进行如下的声明:
public myDataBaseHelper(Context context, String name,SQLiteDatabase.CursorFactory factory, int version){super(context, name, factory, version);}
context
是当前的上下文环境;name
是自定义的数据库的名字,factory
一般是表示查询时传入的Cursor
,一般传入null
,需要时查询; 最后一个时数据库的版本,用于升级。
onCreate() 函数简介
该函数用于建表。因为构造函数创建了一个数据库,那么在创建的数据库中需要根据需求建表,不懂的自己看数据库原理吧。。。构造函数中一般是写建表的SQL语句,我们一般以静态成员的方式定义建表语句,然后执行。
@Overridepublic void onCreate(SQLiteDatabase db){db.execSQL(CREATE_BOOK);}
CREATE_BOOK
时建表语句,在这里定义成静态String
类型, 当定义玩数据库后,就会根据语句的含义在相应的db
中建立一个表,如果之前那个表存在,不会建立新的表。注意,这里的db
是自己命名的一个数据库,比如我们可以传入"BookDB.db"
表示建立或者使用BookDB.db
这个数据库。
一般来说,定义好数据库后,会调用getWritableDatabase()
或者getReadableDatabase()
方法,通过这两函数进行数据库的构建。实际上,这两个函数调用了onCreate
函数,如果数据库已经存在了,这两个函数会返回一个数据库对象。
onUpgrade() 函数简介
该函数用于数据库的更新操作。如果我们想要在已有的数据库中添加一个新的表,需要重写并调用这个方法。当然,建立新表的语句在onCreate
方法中完成。
方法如下:
@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){// 如果存在Book这个表,那么把表删除,一般是根据需要进行操作// db.execSQL("drop table if exists Book");// 创建新版本的数据库onCreate(db);}
重写完这个方法后,在调用构造函数myDataBaseHelper
时,仅仅需要把version参数改成比之前的高一个版本即可。调用完构造函数后,在执行getWritableDatabase()
或者getReadableDatabase()
方法,进行数据库的构建
SQLiteDatabase
这是一个数据库对象,用于对数据库进行”增、删、改、查”的操作。因为SQLiteOpenHelper
的 getWritableDatabase()
或者getReadableDatabase()
方法返回这个类型的对象,我们需要定义一个该类型的对象来引用这个返回。
insert插入操作
SQLiteDatabase::insert("Book", null, values)
。Book
是数据库中表的名字;第二个参数为限制条件,一般传入null
,需要时再查询;values
是要传入的数据,是ContentValues
数据类型。
// 添加数据
ContentValues values=new ContentValues();
// 第一个参数是列名
values.put("name", "The Da Vinci Code");
values.put("price",16.96);
// 插入数据
db.insert("Book",null,values);
update()更新方法
// 建立数据库
dhHelper=new myDataBase(this, "BookStore.db",null,2);
// 获取相应的数据库对象
SQLiteDatabase db=new dbHelper.getWritableDatabase();
// 设置更改的数据
ContentValues values=new ContentValues();
values.put("price",10.99);
// 更新数据
db.update("Book",values,"name=?",new String[]{"The Da Vinci Code"});
db.update("Book",values,"name=?",new String[]{"The Da Vinci Code"})
中的第一个参数表示表的名称;第二个参数表示更新的数值;第三个参数是个占位符,相当于where
语句;第四个参数提供字符串数组,为第三个参数指定相应的内容。
delete删除操作
// 建立数据库
dhHelper=new myDataBase(this, "BookStore.db",null,2);
// 获取相应的数据库对象
SQLiteDatabase db=new dbHelper.getWritableDatabase();
// 删除数据
db.update("Book","page>?",new String[]{"500"});
三个参数分别是:表明、where限制语句、限制条件的具体内容
query()查询操作
该函数有7个参数,分别是:
一般根据需要进行选取。
调用完之后会返回一个Cursor
对象,查询到的所有对象都从这个对象中取出。
比如:
/ 建立数据库
dhHelper=new myDataBase(this, "BookStore.db",null,2);
// 获取相应的数据库对象
SQLiteDatabase db=new dbHelper.getWritableDatabase();// 获取要查询的数据对象,在这里获取整个表的内容
Cursor cursor=db.query("Book",null,null,null,null,null,null);
// 遍历所有的元素
if(cursot.moveToFirst()){do{String name=cursor.getString(cursor.getColumnIndex("pages"));String name=curosr.getString(cursor.getColumnIndex("name"));}while(cursor.moveToNext());
}
cursor.close(); // 在这里释放掉所有的元素
也可以使用原生的数据库语句进行查询,在这里不在赘述,直接查找有关手册即可。
总结
SQLiteOpenHelper
用于建立和更新数据库, SQLiteDatabase
用于获取前者建立的数据库对象,并在获得的数据库对象中,对有关表进行操作。 两者配合使用,完成一般数据库的操作。
安卓数据库的使用方式相关推荐
- android系统密码设置功能,手机锁屏密码怎么设置 三种安卓手机锁屏方式推荐
手机中有很多应用都是与金钱挂钩,特别是微信与支付宝等等既涉及到隐私又与财产关联,这是后手机的安全就尤为重要的,而手机的锁屏密码就是一道最基本的防护措施,那么手机锁屏密码怎么设置?来看看小编推荐的三种安 ...
- DB扩展名的数据库文件怎么打开:两种db数据库的打开方式
两种db数据库的打开方式 现在桌面级的各种管理系统使用的数据库都是比较常见的类型,比如Access数据库(扩展名为mdb).xBase类数据库(扩展名为dbf),但有两种扩展名同为db的数据库,分属两 ...
- java如何做数据归档_oracle数据库的归档方式
数据库可运行在两种不同方式下:NOARCHIVELOG方式(介质恢复无效)或ARCHIVELOG方式(介质恢复有效).数据库的运行方式对数据库的 备份和恢复 策略具有重要的影响.归档日志对数据库备份和 ...
- django mysql 创建表_关于 django ORM 中,数据库建表方式的问题
本人以前是做客户端的,做后端没多久. 一直有一个问题困扰我,正好现在手上有一个系统在做. 系统逻辑是写一个爬虫在网上爬取一个网站的信息, 经过加工处理后,使用 django 来展示和交互. 表结构简化 ...
- php mysql 替换 pdo,php操作MySQL数据库之PDO方式
这篇文章主要介绍了关于php操作MySQL数据库之PDO方式 ,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下基本使用 1)连接数据库$pdo = new PDO("mysql ...
- JetPack Room数据库组件使用方式
JetPack Room数据库组件使用方式 1.Room 简介 Goolge官方是这样描述的 Room 在 SQLite 上提供了一个抽象层,以便在充分利用 SQLite 的强大功能的同时, 能够流畅 ...
- 【Mysql数据库】数据库添加索引方式
文章目录 数据库添加索引方式 1.添加PRIMARY KEY(主键索引) 2.添加UNIQUE(唯一索引) 3.添加普通索引 4.添加全文索引 5.添加多列索引 数据库添加索引方式 1.添加PRIMA ...
- 图片或者其他文件在数据库的存储方式详解
关于图片或者文件在数据库的存储方式归纳 商品图片,用户上传的头像,其他方面的图片.目前业界存储图片有两种做法: 1. 把图片直接以二进制形式存储在数据库中 一般数据库提供一个二进制字段来存储二进制数 ...
- python常见数据库的连接方式【游标】及【pandas】数据读取
本文介绍以下数据库的连接方式,及数据的增删改查 下方中用到的数据,均为随机数据,无实际业务意义. Mysql-游标及pandas连接方式 PostgreSQL-游标及pandas连接方式 Oracle ...
最新文章
- 查询前10条_阿里开发强制要求的10条ORM映射查询规范,开发人员值得看
- VMware安装RedHat 6(64位)报错问题
- Http中涉及到的知识点总结
- 作业调度算法--高响应比优先 操作系统_处理器管理_编程题
- java 无名类做参数_说说你知道的几种主要的JVM参数
- 《第一行代码》学习笔记35-服务Service(2)
- 为什么盯一个字看久了,反而感觉不认识了?
- Ninject依赖注入(一)
- 从浪漫走向坚韧:开源数据库的演变
- 在二元树中查找和为某一值的所有路径
- 存储过程/函数权限的问题解决(The user specified as a definer ('root'@'%') does not exist)...
- hashmap hash冲突怎么解决_让我再撸一次HashMap
- loadrunner11 linux服务器,loadrunner11监控linux服务器性能
- mysql数据导出insert_mysql 数据导出
- 码农都该知道的开发工具
- 软酷优计划java考试复习题_软酷题
- 【XSY3367】青春野狼不做姐控偶像的梦(线段树)
- SAP 新配置公司代码F-02记账时报错“通用日记账的分类账定制设置中存在不一致” 解决
- java加密解密 pdf_Java 加密和解密PDF文档
- uber幽灵车_Uber&Careem合并:新兴的出租车服务将在中东和北非地区产生影响?...
热门文章
- 学计算机的副部级,中国31所副部级大学排名
- python网络爬虫学习笔记(五):urllib.parse库
- 牛客 2021年度训练联盟热身训练赛第二场 D题Soccer Standings
- hihocoder234周 计算不包含黑点的矩形个数
- ODrive踩坑(二)3508电机和TLE5012B磁编码器参数配置、校准、位置闭环模式转动电机(TLE5012B-E1000)
- 语义分割之图像经镜像、翻转、裁剪后像素点的位置映射
- 【WCF】WCF服务库和WCF服务应用程序的区别
- javascript中的||运算符
- 随机显示个性签名代码
- python爬虫之requests模块2