(转)Android学习笔记---SQLite介绍,以及使用Sqlite,进行数据库的创建,完成数据添删改查的理解
原文:http://blog.csdn.net/lidew521/article/details/8655229
1.SQLite介绍:最大特点是,无数据类型;
除了可以使用文件或SharedPreferences存储数据,还可以选择使用SQLite数据库存储数据。
在Android平台上,集成了一个嵌入式关系型数据库—SQLite,SQLite3支持
NULL、INTEGER
、REAL(浮点数字)、TEXT(字符串文本)和BLOB(二进制对象)数据类型,虽然它支持的类型
只有五种,但实际上sqlite3也接受varchar(n)、char(n)、decimal(p,s)
等数据类型,只不
过在运算或保存时会转成对应的五种数据类型。
SQLite最大的特点是你可以把各种类型的数
据保存到任何字段中,而不用关心字段声明的数据类型是什么。例如:可以在Integer类型的
字段中存放字符串,或者在布尔型字段中存放浮点数,或者在字符型字段中存放日期型值。
但有一种情况例外:定义为INTEGER
PRIMARY KEY的字段只能存储64位整数, 当向这种字段
保存除整数以外的数据时,将会产生错误。 另外, SQLite
在解析CREATE TABLE 语句时,
会忽略 CREATE TABLE 语句中跟在字段名后面的数据类型信息,如下面语句会忽略
name字段
的类型信息:
CREATE TABLE person (personid integer primary key
autoincrement, name
varchar
(20))
SQLite可以解析大部分标准SQL语句,如:
查询语句:select * from 表名
where 条件子句 group by 分组字句 having ... order by
排序子句
如:select * from
person
select * from person order by id desc
select name
from person group by name having
count(*)>1
---------------------------------------------------------------------------
2.a.分页SQL与mysql类似,下面SQL语句获取5条记录,跳过前面3条记录
select * from Account limit 5 offset 3 或者 select * from Account limit 3,5
b.select * from Account limit 3,5,指的是跳过前面的3条记录,然后获取5条记录
c.select * from
Account limit 3,5是select * from Account limit 5 offset 3语句
的简写版
-------------------------------------------------------------------------------
3.常用操作:
a.插入语句:insert
into 表名(字段列表) values(值列表)。如: insert into person
(name, age)
values(‘传智’,3)
b.更新语句:update 表名 set 字段名=值 where 条件子句。如:update person set
name=
'credream‘ where id=10
c.删除语句:delete from 表名 where
条件子句。如:delete from person where
id=10
-------------------------------------------------------------------------------
2.虽然无数据类型,但是建议加上,这样可以增加可读性,支持标准sql,oracle中的不行
---------------------------------------------------
3.获取添加记录后的自增长的ID值:select
last_insert_rowid();
-----------------------------------------------------------
4.在android中开发数据库应用:
a.创建数据库:以前在javaee时候,需要手工数据,但是android应用,需要运行在用户的
手机上,所以,android应用,要有自动创建数据库功能,当第一次使用软件的时候
就创建数据库
----------------------------------------
5.关于数据库自动创建的详细介绍:
我们在编写数据库应用软件时,需要考虑这样的问题:因为我们开发的软件可能会安装在很
多用户的手机上,如果应用使用到了SQLite数据库,我们必须在用户初次使用软件时创建出
应用使用到的数据库表结构及添加一些初始化记录,另外在软件升级的时候,也需要对数据
表结构进行更新。那么,我们如何才能实现在用户初次使用或升级软件时自动在用户的手机
上创建出应用需要的数据库表呢?总不能让我们在每个需要安装此软件的手机上通过手工方
式创建数据库表吧?因为这种需求是每个数据库应用都要面临的,所以在Android系统,为我
们提供了一个名为SQLiteOpenHelper的抽象类,必须继承它才能使用,它是通过对数据库版
本进行管理来实现前面提出的需求。
-----------------------------------------
6.SQLite数据库添加,删除,改查操作
A.创建数据库:SQLiteOpenHelper .getWritableDatabase()或getReadableDatabase()
可以创建数据库
7.创建完成以后可以使用SQLITE Expert软件打开生成的数据库
可以看到除了生成的自己的需要的表之外,还生成了一张:android_metadata表:
如果在sqlite中使用数据库一定会有一张android_metadata表,用来登记用户的
使用语言:zh_cn
-----------------------------------------------------
b.数据库自动创建的过程及方法详细介绍:
我们在编写数据库应用软件时,需要考虑这样的问题:因为我们开发的软件可能会安装在
很多用户的手机上,如果应用使用到了SQLite数据库,我们必须在用户初次使用软件时创建
出应用使用到的数据库表结构及添加一些初始化记录,另外在软件升级的时候,也需要对数
据表结构进行更新。那么,我们如何才能实现在用户初次使用或升级软件时自动在用户的手
机上创建出应用需要的数据库表呢?总不能让我们在每个需要安装此软件的手机上通过手工
方式创建数据库表吧?因为这种需求是每个数据库应用都要面临的,所以在Android系统,为
我们提供了一个名为SQLiteOpenHelper的抽象类,必须继承它才能使用,它是通过对数据库
版本进行管理来实现前面提出的需求。
-------------------------------------------
8.详细介绍:
为了实现对数据库版本进行管理,SQLiteOpenHelper类提供了两个重要的方法,分别是
onCreate(SQLiteDatabase
db)和onUpgrade(SQLiteDatabase db, int oldVersion,
int
newVersion),前者用于初次使用软件时生成数据库表,后者用于升级软件时更新数据库表结
构。当调用SQLiteOpenHelper的getWritableDatabase()或者getReadableDatabase()方法获
取用于操作数据库的SQLiteDatabase实例的时候,如果数据库不存在,Android系统会自动生
成一个数据库,接着调用onCreate()方法,onCreate()方法在初次生成数据库时才会被调用
,在onCreate()方法里可以生成数据库表结构及添加一些应用使用到的初始化数据。
onUpgrade()方法在数据库的版本发生变化时会被调用,一般在软件升级时才需改变版本号,
而数据库的版本是由程序员控制的,假设数据库现在的版本是1,由于业务的变更,修改了数
据库表结构,这时候就需要升级软件,升级软件时希望更新用户手机里的数据库表结构,为
了实现这一目的,可以把原来的数据库版本设置为2(有同学问设置为3行不行?当然可以,如
果你愿意,设置为100也行),并且在onUpgrade()方法里面实现表结构的更新。当软件的版本
升级次数比较多,这时在onUpgrade()方法里面可以根据原版号和目标版本号进行判断,然后
作出相应的表结构及数据更新。
getWritableDatabase()和getReadableDatabase()方法都可以获取一个用于操作数据库的
SQLiteDatabase实例。但getWritableDatabase()
方法以读写方式打开数据库,一旦数据库
的磁盘空间满了,数据库就只能读而不能写,倘若使用的是getWritableDatabase()
方法就
会出错。getReadableDatabase()方法先以读写方式打开数据库,如果数据库的磁盘空间满了
,就会打开失败,当打开失败后会继续尝试以只读方式打开数据库。
------------------------------------------------------------------------
9.创建数据库的代码:
a.创建项目:DBSQLIte
b./DBSQLIte/src/com/credream/service/DBOpenHelter.java
package com.credream.service;
import
android.content.Context;
import
android.database.sqlite.SQLiteDatabase;
import
android.database.sqlite.SQLiteOpenHelper;
import
android.database.sqlite.SQLiteDatabase.CursorFactory;
public class
DBOpenHelter extends SQLiteOpenHelper
{
//父类没有默认构造器,需要显示调用
public
DBOpenHelter(Context context)
{
super(context,
"credream.db", null,
1);
//数据库创建完成后,默认会保存在<包>/database/文件夹下
//当修改版本号时候,会触发:onUpgrade方法
//第二个:指定数据库名称,
//第三个:游标工厂,用来迭代,查询后的结果集,null代表使用系统默认的
游标工厂
//版本号,大于0
}
/**
*
这个方法是在数据库第一次被创建的时候调用的
*/
@Override
public
void onCreate(SQLiteDatabase db)
{
//SQLiteDatabase这个类,封装了增删改查操作,也叫做数据库操作实例
db.execSQL("CREATE
TABLE person (personid integer primary key
autoincrement, name
varchar(20))");
//这里也可以不写name的数据类型,因为sqlite是数据类型无关的,就是写
了varchar(20),也可以写入超过20的内容
}
/**
*
当数据库的版本号变更的时候被调用
*/
@Override
public
void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
db.execSQL("alter
table person add phone varchar(12) null");
}
}
--------------------------------------------------------
2.在清单文件中写入测试环境
<uses-library android:name="android.test.runner" />
</application>
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.credream.db" android:label="Tests for My App"
/>
----------------------------------------------------
3./DBSQLIte/src/com/credream/test/PersonServiceTest.java
package
com.credream.test;
import
com.credream.service.DBOpenHelter;
import
android.test.AndroidTestCase;
public class PersonServiceTest extends
AndroidTestCase
{
//创建数据库,在<包>/database/
public
void testCreateDB(){
DBOpenHelter
dbOpenHelter=new DBOpenHelter(getContext());
dbOpenHelter.getWritableDatabase();
}
}
-------------------------------------------------------
4.选择方法开始测试,然后,在data/data/<包>/database/下
查看并用sqlite打开生成的数据库检查是否正确
---------------------------------------------
然后将版本号,改成2,然后再次执行,看到,表已经被更新,增加了一列phone
-----------------------------------------------
5.了解sqlite工作的原理:
DBOpenHelter dbOpenHelter=new DBOpenHelter(getContext());
dbOpenHelter.getWritableDatabase();
打开getWritableDatabase();代码:
(转)Android学习笔记---SQLite介绍,以及使用Sqlite,进行数据库的创建,完成数据添删改查的理解的更多相关文章
- 【转】 Pro Android学习笔记(八一):服务(6):复杂数据Parcel
目录(?)[-] 自定义的Parcelable类 AIDL文件 服务的实现 Client的实现 同步和异步 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处 ...
- 黎活明8天快速掌握android视频教程--17_创建数据库与完成数据添删改查
1.我们首先来看下整个项目 项目也是采用mvc的框架 package dB; import android.content.Context; import android.database.sqlit ...
- 【转】Pro Android学习笔记(七):了解Content Provider(下上)
我们通过一个Content Provider小例子进行详细说明.数据源是一个SQLite数据库,名字为books.db,该数据库只含有一个表格,名字为books.表格中含有name,isbn,auth ...
- Android学习笔记36:使用SQLite方式存储数据
在Android中一共提供了5种数据存储方式,分别为: (1)Files:通过FileInputStream和FileOutputStream对文件进行操作.具体使用方法可以参阅博文<Andro ...
- Android 学习笔记之如何使用SQLite数据库来保存数据...
PS:最近一阵子都在为考试复习...坑爹的计算机网络,复习了3天,最后该不会的还是不会...明天还考英语...真蛋疼... 学习内容: 1.使用SQLite数据库来保存数据... SQLite: ...
- Android学习笔记_47_SIM卡介绍
一.判断SIM卡属于哪个移动运营商 1.第一种方法:获取手机的IMSI码,并判断是中国移动\中国联通\中国电信 TelephonyManager telManager = (TelephonyMana ...
- 【转】 Pro Android学习笔记(五五):调试和分析(3):adb命令、模拟器控制台和StrictMode
目录(?)[-] adb命令 模拟器Console StrictMode adb命令 我们在学习SQLite的使用,介绍过部分adb命令的使用,见Pro Android学习笔记(五):了解Conten ...
- Android学习笔记之JSON数据解析
转载:Android学习笔记44:JSON数据解析 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种 ...
- udacity android 学习笔记: lesson 4 part b
udacity android 学习笔记: lesson 4 part b 作者:干货店打杂的 /titer1 /Archimedes 出处:https://code.csdn.net/titer1 ...
随机推荐
- 【CITE】利用鼠标绘图C#
实例018 利用鼠标绘图 光盘位置:光盘\MR\01\018 在常用的画图软件中,用户一般都可以通过鼠标在其中绘图,那么该功能是如何实现的呢?本实例将讲解如何使用C#实现通过拖动鼠标在窗体上绘图的功能 ...
- 高性能Web服务端 PHP vs Node.js vs Nginx-Lua 的对比分析
1. ngx_lua nodejs php 比较 我在研究一阵子ngx_lua之后发现lua语法和js真的很像,同时ngx_lua模型也是单线程的异步的事件驱动的,工作原理和nodejs相同,代码甚至 ...
- 为SpringMvc项目安装BootStrap和AngularJs前端框架
在我们"用SpringMVC写一个注册的小Demo"之前,我们学习一下如何给该项目安装Bootstrap和AngularJs的前端框架,这样我们就能轻松排版出漂亮的登录界面.我们采 ...
- MySQL 存储php中json_encode格式中文问题及解决
MySQL 存储php中json_encode格式信息 ,遇到中文时, 会变成一堆类似uxxxx信息. 1. 原因分析:在存储到数据库时!MySQL 不会存储 unicode 字符: MySQL 仅 ...
- C/C++ 关于生成静态库(lib)/动态库(dll)文件如何使用(基于windows基础篇)
1. 首先,如何制作一个静态库(lib)? 额, 对于静态库,我们知道,里头是不应该有Main函数,它只是一个配合文件.之所以称之为lib静态库,其实就是指,我们需要用到lib里头的函数时,我们才会去 ...
- Objective-C(一简介)
Objective-C简介 通常写作ObjC和较少用的Objective C或Obj-C,是扩充C的面向对象编程语言.它主要使用于Mac OS X和GNUstep这两个使用OpenStep标准的系统, ...
- 实现IEnumberable接口和IEnumberator
class BookEnum : IEnumerator //实现foreach语句内部,并派生 { public Book[] _book; //实现数组 ;//设置“指针” public Book ...
- hadoop工作流引擎之azkaban [转]
介绍 Azkaban是twitter出的一个任务调度系统,操作比Oozie要简单很多而且非常直观,提供的功能比较简单.Azkaban以Flow为执行单元进行定时调度,Flow就是预定义好的由一个或多个 ...
- HTML 中 META的作用
说明: meta是用来在HTML文档中模拟HTTP协议的响应头报文.meta 标签用于网页的<head>与</head>中,meta 标签的用处很多.meta 的属性有两种:n ...
- Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost are already in use.
Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost are already in use. The ...