Android中的数据库

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

1.1. 什么时候使用数据库

有大量相似结构的数据需要存储的时候就可以使用数据库。

1.2. SQLite的简介

SQLite是一款轻量级的数据库。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它。Android系统和iOS系统中都嵌入了SQLite数据库。

1.3. SQLite数据库的创建流程

(1) 定义一个类继承SQLiteOpenHelper。 
(2) 添加一个构造函数:

public MyOpenHelper(Context context) {super(context, "test.db", null,1);
}
  • 1
  • 2
  • 3
  • 4

第2行,调用父类的构造方法。 
参数1代表上下文, 
参数2代表数据库的名字, 
参数3代表游标工厂,通常为null, 
参数4代表数据库版本,从1开始。

(3) 实现oncreate(),和onUpgrade()方法。

1.4. onCreate()和onUpgrade()方法

onCreate()方法是当数据库第一次创建的时候调用,这个方法适合做表结构的初始化,创建表也就是编写sql语句。

@Override
public void onCreate(SQLiteDatabase db) {db.execSQL("create table info(_id integer primary key autoincrement,name varchar(20),phone varchar(20))");
}
  • 1
  • 2
  • 3
  • 4
  • 5

第3行,执行sql语句。 
onUpgrade()方法是当数据库版本升级的时候调用,一般在方法中做表结构的更新:

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {db.execSQL("alter table info add phone varchar(20)");
}
  • 1
  • 2
  • 3
  • 4
  • 5

1.5. 获取数据库对象

通过getWritableDatabase()和getReadableDatabase()获取数据库对象。

方法解释
getWritableDatabase()打开或者创建数据库用来读和写,如果是第一次就是创建。
getReadableDatabase()打开或者创建数据库,和getWritableDatabases()一样,如果是第一次就是创建,除非发生某些问题如果磁盘满了,那么就返回只读的数据库对象。

2. 使用sql语句增删改查

缺点: 
1.sql语句容易写错; 
2.执行sql语句没有返回值。

2.1. 插入记录

public void click1(View v){SQLiteDatabase db = myOpenHelper.getWritableDatabase();db.execSQL("insert into info(name,phone) values(?,?)", new Object[]{"张三","1388888"});db.close();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

第2行,获取数据库对象; 
第3行,执行sql语句,向info表中插入一条记录; 
第5行,关闭数据库。

2.2. 删除记录

public void click2(View v){SQLiteDatabase db = myOpenHelper.getWritableDatabase();db.execSQL("delete from info where name=?", new Object[]{"张三"});db.close();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2.3. 修改数据

public void click3(View v){SQLiteDatabase db = myOpenHelper.getWritableDatabase();db.execSQL("update info set phone=? where name=? ",new Object[]{"138888888","张三"});db.close();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

2.4. 查找

//查找
public void click4(View v){SQLiteDatabase db = myOpenHelper.getReadableDatabase();Cursor cursor = db.rawQuery("select * from info", null);if (cursor!= null&&cursor.getCount()>0) {while(cursor.moveToNext()){//columnIndex代表列的索引 String name = cursor.getString(1);String phone = cursor.getString(2);System.out.println("name:"+name+"----"+phone);}}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

Cursor游标是从第一条数据之前开始的 
第5行,cursor.getCount()获取记录数; 
第6行,cursor.moveToNext(),将游标移动到下一条记录,如果有记录则返回true,如果没有则返回false。

3. 使用谷歌封装好的api增删改查

优点: 
       写法简单,不需要复杂的sql语句,不容易写错; 
       有返回值方便开发者开发。 
缺点: 
       如果有多张表,使用谷歌封装的api不容易进行查询。

3.1. 插入记录

public void click1(View v) {SQLiteDatabase db = myOpenHelper.getWritableDatabase();ContentValues values = new ContentValues();values.put("name", "王五");values.put("phone", "110");long insert = db.insert("info", null, values); db.close();if (insert > 0) {Toast.makeText(getApplicationContext(), "添加成功", 1).show();} else {Toast.makeText(getApplicationContext(), "添加fail", 1).show();}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

第3行,ContentValues内部封装了一个map,key是对应列的名字,value对应值; 
第6行,insert()方法返回值代表插入新行的id,如果该返回值数值大于0,那么久插入成功,其底层就是在组拼sql语句。

3.2. 删除记录

public void click2(View v) {SQLiteDatabase db = myOpenHelper.getWritableDatabase();int delete = db.delete("info", "name=?", new String[] { "王五" });db.close();Toast.makeText(getApplicationContext(), "删除了" + delete + "行", 0).show();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

第3行delete()方法返回值代表影响的行数。

3.3. 修改数据

public void click3(View v) {SQLiteDatabase db = myOpenHelper.getWritableDatabase();ContentValues values = new ContentValues();values.put("phone", "114");int update = db.update("info", values, "name=?", new String[] { "王五" });db.close();Toast.makeText(getApplicationContext(), "更新了" + update + "行", 0).show();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

第5行,update()方法返回值代表更新了多少行。

3.4. 查找

public void click4(View v) {SQLiteDatabase db = myOpenHelper.getReadableDatabase();Cursor cursor = db.query("info", null, null, null, null, null, null);if (cursor != null && cursor.getCount() > 0) {while (cursor.moveToNext()) {String name = cursor.getString(1);String phone = cursor.getString(2);}}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

第3行,query方法返回查询到的Cursor,Cursor就是查询到的结果集。方法参数代表的含义:

参数含义
table查询的表名
columns查询的列
selection查询条件,一般会使用占位符如:”name=?”
selectionArgs查询条件的参数
groupBy分组
orderBy排序 desc(降序) asc(升序)

4. 使用命令行工具 sqlite3

打开cmd命令行工具,输入adb shell命令挂载到linux空间。 
进入data/data目录下,输入命令cd data/data。 
ls列出所有目录: 
这里写图片描述 
进入我们应用的包名目录下,cd+包名。 
然后进入databases目录下: 
这里写图片描述 
打开数据库,sqlite3+数据库名称: 
这里写图片描述 
执行sql语句进行操作: 
这里写图片描述 
改变dos的编码方式: 
改成gbk编码方式:chcp 936; 
改成utf-8编码方式:chcp 65001。

转载于:https://my.oschina.net/u/2884845/blog/740725

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/457993.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python计算绩效工资_python实现 --工资管理系统

原博文 2017-07-25 22:41 − # -*- coding: utf-8 -*- __author__ hjianli # import re import os info_message """Alex 100000 Rain 80000 Egon 50000 Yuan 30000 """ #序列字典 xulie_...01669 相关推荐 2019-09-28 21:13 − Python python…

为Windows Server 2012 R2指定授权服务器

为Windows Server 2012 R2指定授权服务器在Windows Server 2008 R2的终端服务中,可以手动指定授权服务器,而在Windows Server 2012 R2中,默认只能通过"远程桌面连接服务"管理器,指定授权服务器,而要使用远程…

spring5高级编程_Spring 5.X系列教程:满足你对Spring5的一切想象-持续更新

简介是什么让java世界变得更好,程序员变得更友爱,秃头率变得不是那么的高,让程序员不必再每天996,有时间找个女朋友?是Spring。是什么让企业级java应用变得简单易懂,降低了java程序员的进入门槛&#xff0c…

关于resolve非泛型方法不能与类型实参一起使用

今天mvc新建三层时,写到bll层中一直报下面的错误,检查了几遍赶脚并没有什么错。最后发现缺少一些引用。 如下面的图,少添加了下面的两个引用.Unity是微软模式与实践团队开发的一个轻量级、可扩展的依赖注入容器, Microsoft.Practices.Unity.C…

设计模式-Singleton

2019独角兽企业重金招聘Python工程师标准>>> Singleton算是知道的设计模式中最简单的最方便实现的了,模式实现了对于类提供唯一实例的方法,在很多系统中都会用到此模式。在实际项目中使用全局变量,或者静态函数等方式也可以达到这…

dump分析工具_Java应用CPU过高,如何排查?参考解决思路和常用工具总结

本文总结了一些常见的线上应急现象和对应排查步骤和工具。分享的主要目的是想让对线上问题接触少的同学有个预先认知,免得在遇到实际问题时手忙脚乱。毕竟作者自己也是从手忙脚乱时走过来的。只不过这里先提示一下。在线上应急过程中要记住,只有一个总体…

dos攻击命令_Kali Linux系列之拒绝服务攻击(DOS)实战(上)

(你的世界是个什么样的世界?你说,我们倾听!)-----------------小百科拒绝服务攻击即是攻击者想办法让目标机器停止提供服务,是黑客常用的攻击手段之一。其实对网络带宽进行的消耗性攻击只是拒绝服务攻击的一小部分,只要能够对目标…

stm32定时器配置

stm32通用定时器 STM32的定时器是个强大的模块,定时器使用的频率也是很高的,定时器可以做一些基本的定时,还可以做PWM输出或者输入捕获功能。 时钟源问题: 名为TIMx的有八个,其中TIM1和TIM8挂在APB2总线上,…

python数组定义_python定义数组

广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 一、一维数组 1. 直接定义matrix2. 间接定义matrixprint(matrix)输出:3. 数组乘法matrix*5print…

Android-语言设置流程分析

Android手机语言切换行为,是通过设置-语言和输入法-语言来改变手机的语言,其实这个功能很少被用户使用。 以Android5.1工程源码为基础,从设置app入手来分析和学习语言切换的过程:一、语言设置界面:首先在设置app中找到语言设置这个Preference…

charles 安装 ssl_最全面的解决Charles手机抓包的证书问题(步骤非常详细)

源自公众号文章: 彻底解决Charles手机抓包的证书问题简介: Charles 抓包是日常开发当中经常会用到的技术, 在 Android 6 之前, 手机系统既信任系统内置的证书, 也信任用户自己安装的证书, 但是在 Android 7 之后, 却发生了变化, 手机系统只信任系统内置的根证书. 当然了, 这是为…

excel 2007 vba与宏完全剖析_Excel宏VBA小技巧系列 | 分段加合

写在前面的话 知识产权算是一个盛产数据的行业。专利啊商标啊著作啊,都有著录项目。我们常说的专利分析、产业导航、企业导航、产业预警、竞争情报、技术综述、知识产权评议等等,常规操作之一就要先处理著录项目数据,然后再进行不同角度的分…

redhat虚拟机安装

做过好多使用VMware workstation虚拟机搭建的系统,这是我第一次使用Virtual Box,感觉跟Vmware差不多,我的本子的系统是win7 64位。 下面演示安装的是在VirtualBox里安装rhel 6.4 linux 64位系统。 一、VirtualBOX 版本。 二、虚拟机的配置。…

mysql 查看表v空间自增涨_MySQL InnoDB表空间加密

从 MySQL5.7.11开始,MySQL对InnoDB支持存储在单独表空间中的表的数据加密 。此功能为物理表空间数据文件提供静态加密。该加密是在引擎内部数据页级别的加密手段,在数据页写入文件系统时加密,加密用的是AES算法,而其解密是在从文件…

ideaspringboot项目上传服务器_PHP中使用 TUS 协议来实现可恢复文件上传

曾经尝试过用PHP上传大文件吗?想知道您是否可以从上次中断的地方继续上传,而不会在遇到任何中断的情况下再次重新上传整个数据?如果您觉得这个场景很熟悉,请接着往下阅读。文件上传是我们几乎所有现代Web项目中的一项很常见的任务…

java使用xml存储数据_用存储过程和 JAVA 写报表数据源有什么弊端?

用存储过程和 JAVA 写报表数据源有什么弊端?跟着小编一起来一看一下吧!我们在报表开发中经常会使用存储过程准备数据,存储过程支持分步计算,可以实现非常复杂的计算逻辑,为报表开发带来便利。所以,报表开发…

MAC OS上JAVA1.6 升级1.7,以及 maven3.2.1配置

一、我的MAC系统 预装的Jdk是1.6,由于需要使用eclipse MARs 2版本,故需要升级到1.7 二、下载JAVA jdk http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html 不知道为什么直接下非常慢,后来用的迅雷就超级快…

sql server 创建唯一性非聚集索引语句_数据库专题—索引原理

深入浅出数据库索引原理参见:https://www.cnblogs.com/aspwebchh/p/6652855.html1.为什么给表加上主键?1.平时创建表的时候,都会给表加上主键。如果没有主键的表,数据会一行行的排列在磁盘上,查找一个数据需要一条条的进行对比。而…

oracle数据库更新语句_20_手把手教你学Python之操作数据库

数据库是数据的仓库,将大量数据按照一定的方式组织并存储起来,方便进行管理和维护,例如快速检索和统计等。数据库的主要特点:以一定的方式组织、存储数据;能为多个用户共享;与程序彼此独立。……数据库管理…

查询Oracle正在执行的sql语句

--查询Oracle正在执行的sql语句及执行该语句的用户 [sql] view plaincopy SELECT b.sid oracleID, b.username 登录Oracle用户名, b.serial#, spid 操作系统ID, paddr, sql_text 正在执行的SQL, b.machine 计算机名 FROM v$p…