安卓数据存储(3):SQLite数据库存储
SQLite简介
Google为Andriod的较大的数据处理提供了SQLite,他在数据存储、管理、维护等各方面都相当出色,功能也非常的强大。SQLite具备下列特点:
1.轻量级:使用 SQLite 只需要带一个动态库,就可以享受它的全部功能,而且那个动态库的尺寸想当小。
2.独立性:SQLite 数据库的核心引擎不需要依赖第三方软件,也不需要所谓的“安装”。
3.隔离性:SQLite 数据库中所有的信息(比如表、视图、触发器等)都包含在一个文件夹内,方便管理和维护。
4.跨平台:SQLite 目前支持大部分操作系统,不至电脑操作系统更在众多的手机系统也是能够运行,比如:Android。
5.多语言接口:SQLite 数据库支持多语言编程接口。
6.安全性:SQLite 数据库通过数据库级上的独占性和共享锁来实现独立事务处理。这意味着多个进程可以在同一时间从同一数据库读取数据,但只能有一个可以写入数据。
Android为了让我们能够更好的管理数据库,专门提供了一个SQLiteOpenHelper帮助类,这是一个抽象类,因此要使用的话需要创建一个自己的帮助类去继承它。SQLiteOpenHelper类中有两个抽象方法,分别是onCreate(),和onUpgrade(),帮助类中必须重写这两个方法,然后在这两个方法中去实现创建、升级数据库的逻辑。SQLiteOpenHelper中有两个重要的实例方法,getWritableDatabase()和getReadableDatabase().这两个方法都可以创建或打开一个现有数据库(如果数据库已经存在,则直接打开,否则创建一个新的数据库),并返回一个数据库的写读操作对象。不同的是当数据库不可吸入的时候(如磁盘已满)getReadableDatabase()的方法返回的对象将以只读的方式打开数据库,而getWritableDatabase()则抛出异常。
SQLiteOpenHelper中有两个构造方法可供重写,一般使用参数较少的那一个,即public DatabaseHelper(Context context, String name, CursorFactory factory, int version),其中第一个参数是Context,必须有它才能对数据库进行操作,第二个参数是数据库的名字,第三个参数允许我们在查询数据时返回一个Cursor,一般传入为null,第四个参数是数据库的版本号,可用于对数据库的升级。通过代码实现如下:
新建项目MySQLiteTest:在新建一个DatabaseHelper.java类,继承SQLiteOpenHelper,同时修改activity_main.xml文件,添加如下代码:
<Button
android:id="@+id/create_database"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="创建数据库"/> <Button
android:id="@+id/add_data"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/create_database"
android:text="添加数据"/> <Button
android:id="@+id/up_data"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/add_data"
android:text="更新数据"/> <Button
android:id="@+id/delete_data"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/up_data"
android:text="删除数据"/> <Button
android:id="@+id/query_data"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/delete_data"
android:text="查询数据"/> <Button
android:id="@+id/replace_data"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/query_data"
android:text="使用事务替换数据"/>
activity_main.xml
在DatabaseHelper.java类中 新建一张Book表
public class DatabaseHelper extends SQLiteOpenHelper { public static final String CREATE_BOOK="create table Book("
+"id integer primary key autoincrement,"
+"author text,"
+"price real,"
+"page integer,"
+"name text)"; private Context myContext;
public DatabaseHelper(Context context, String name, CursorFactory factory,
int version) {
super(context, name, factory, version);
// TODO Auto-generated constructor stub
myContext=context;
} @Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL(CREATE_BOOK);
Toast.makeText(myContext, "Create Success", Toast.LENGTH_SHORT).show();
} @Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
// TODO Auto-generated method stub } }
DatabaseHelper
这里把建表的语句定义成一个字符串常量,然后在onCreate()方法中调用SQLiteDatabase的execSQL()方法来执行这条语句,并弹出“Create Success”,这样即可以保证在数据库创建完成的同时创建Book表。
然后在MainActivity.java中点击创建数据库的按钮,代码为:
定义一些变量:
private Button CreatBsesBtn;//创建数据库
private Button addDataBtn;//添加数据
private Button udDataBtn;//更新数据
private Button deleteDataBtn;//删除数据
private Button queryDataBtn;//插叙数据
private Button replaceDataBtn;//替换数据
private DatabaseHelper mydb;
button
mydb=new DatabaseHelper(this, "BookStore.db", null, 1); //添加数据库
CreatBsesBtn.setOnClickListener(new OnClickListener() { @Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
mydb.getWritableDatabase();
}
});
添加数据库
这里通过构建一个DatabaseHelper,并通过构造函数的参数将数据库的名字指定为BookStore.db,版本号为1,然后在点击事件中调用getWritableDatabase()方法。这里查看不具体说明,可以用adb shell来对数据库和表的创建情况进行检查,具体配置不在说明。
下面不具体说明,看代码:
添加数据:
//添加数据
addDataBtn.setOnClickListener(new OnClickListener() { @Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
SQLiteDatabase db=mydb.getWritableDatabase();
ContentValues cv=new ContentValues();
//添加数据
cv.put("name", "Android");
cv.put("author", "jesson");
cv.put("page", 120);
cv.put("price", 75.0);
db.insert("Book", null, cv);
cv.clear();
db.insert("Book",null, cv);
}
});
addData
在这个事件里,先获取到SQLiteDatabase对象,然后使用ContentValues来对要添加的数据进行组装,因为id那一列设置的是自动增长,因此这里只需四列就行了。最后调用insert()方法进行数据插入。
更新数据:
//更新数据
udDataBtn.setOnClickListener(new OnClickListener() { @Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
SQLiteDatabase db=mydb.getWritableDatabase();
ContentValues cv=new ContentValues();
cv.put("prices", 18.32);
db.update("Book", cv, "name=?", new String[]{"Android"});
}
});
更新数据
这里使用update()方法去执行具体更新操作,使用第三四个参数来指定具体更新的是哪一行的,也就是:将书名为Android的书本价格改为 18.32(原来是75.0)。
删除数据:
//删除数据
deleteDataBtn.setOnClickListener(new OnClickListener() { @Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
SQLiteDatabase db=mydb.getWritableDatabase();
db.delete("Book", "page>?", new String[]{"500"});
}
});
删除数据:
这里使用delete()方法去执行删除操作,使用第二三个参数来指定具体删除的是哪一行,这里删除页数超过50页的书。
//查询操作
queryDataBtn.setOnClickListener(new OnClickListener() { @Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
SQLiteDatabase db=mydb.getWritableDatabase();
//查询表中所有数据
Cursor cursor=db.query("Book", null, null, null, null, null, null);
if(cursor.moveToFirst()){
do{
String name=cursor.getString(cursor.getColumnIndex("name"));
String author=cursor.getString(cursor.getColumnIndex("author"));
int page=cursor.getInt(cursor.getColumnIndex("page"));
double price=cursor.getDouble(cursor.getColumnIndex("price"));
}while(cursor.moveToNext());
}
cursor.close();
}
});
查询操作
SQLiteDatabase中提供一个query()方法对数据进行查询,这个方法比较复杂,最短有七个参数,分别如下表所示:
query()方法参数 | 描述 |
table | 指定查询的表名(可为null) |
columns | 指定查询的列名(可为null) |
selection |
指定where的约束条件(可为null) |
selectionArgs | 为where中的占位符提供具体的值(可为null) |
groupBy | 指定需要group by的列(可为null) |
having | 对group by后的结果进一步约束(可为null) |
orderBy | 指定查询结果的排序方式(可为null) |
调用query()方法后会返回一个Cursor对象,查询到的所有数据都将从这个对象中取出。在本次查询中,我们在得到Cursor对象后,调用它的moveToFirst()方法将数据的指针移动到第一行的位置,然后进入一个循环当中,去遍历查询到的每一行数据。在这个循环中,可以通过getColumnIndex()方法获取到每一列在表中对应的位置索引。最后别忘了关闭Cursor.
事务的使用,在下一篇里进行介绍。
安卓数据存储(3):SQLite数据库存储的更多相关文章
- Android 数据存储之 SQLite数据库存储
----------------------------------------SQLite数据库---------------------------------------------- SQLi ...
- Android中数据存储(三)——SQLite数据库存储数据
当一个应用程序在Android中安装后,我们在使用应用的过程中会产生很多的数据,应用都有自己的数据,那么我们应该如何存储数据呢? 数据存储方式 Android 的数据存储有5种方式: 1. Share ...
- <Android基础> (六) 数据存储 Part 3 SQLite数据库存储
6.4 SQLite数据库存储 SQLite是一种轻量级的关系型数据库,运算速度快,占用资源少. 6.4.1 创建数据库 Android为了管理数据库,专门提供了SQLiteOpenHelper帮助类 ...
- Android学习之基础知识九 — 数据存储(持久化技术)之SQLite数据库存储
前面一讲介绍了数据持久化技术的前两种:文件存储.SharedPreferences存储.下面介绍第三种技术:SQLite数据库存储 一.SQLite数据库存储 SQLite数据库是一款轻量级的关系型数 ...
- 使用嵌入式关系型SQLite数据库存储数据
除了可以使用文件或SharedPreferences存储数据,还可以选择使用SQLite数据库存储数据. 在Android平台上,集成了一个嵌入式关系型数据库—SQLite, 1.SQLite3支持 ...
- Android数据存储之SQLite数据库
Android数据存储 之SQLite数据库简介 SQLite的相关知识,并结合Java实现对SQLite数据库的操作. SQLite是D.Richard Hipp用C语言编写的开源嵌入式数据库引擎. ...
- Android存储之SQLite数据库
Android存储之SQLite数据库数据库 创建数据库 package --; import android.content.Context; import android.database.sql ...
- python实现用户登陆(sqlite数据库存储用户信息)
python实现用户登陆(sqlite数据库存储用户信息) 目录 创建数据库 数据库管理 简单登陆 有些地方还未完善. 创建数据库 import sqlite3 #建一个数据库 def create_ ...
- android开发之使用SQLite数据库存储
http://blog.csdn.net/jason0539/article/details/16360835 SQLite 介绍 SQLite 一个非常流行的嵌入式数据库,它支持 SQL 语言,并且 ...
- 4、Android-数据存储方案(SQLite数据库存储)
4.4.SQLite数据库存储 这是Android内置的数据库 是一款轻量级的关系型数据库 运算速度非常快.占用资源少.通常只需要几百kb的内存就够了 因而特别适合在移动端设备上使用 SQLite不仅 ...
随机推荐
- [POJ 2019] Cornfields
Cornfields Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 5516 Accepted: 2714 Descri ...
- nvidia gpu fan speed control
nvidia在linux上控制风扇速度,需要起X,在无显示器链接的服务器上显得有点坑,这里汇总一下整个流程 1.nvidia-xconfig --cool-bits=4 生成xorg.conf 2.在 ...
- css滑动门制作圆角按钮
之前做项目的时候,基本都是将圆角背景图切成三块,故而每次用的标签都超级多,a标签中总是包含三个span,然后里面还得放按钮,导航冗余标签极多. 事实上是之前理解的滑动门的精髓不够到位. 现在有两种方式 ...
- 转(NLP必读)
如果你刚接触自然语言处理并对她感兴趣,最好读几本这方面的书籍,除了能让你知道自然语言处理各个领域是干什么的外,还能培养一下NLP的感觉.以下四本书是我读研期间阅读和接触过的,如果您还有好书推荐,欢迎补 ...
- BI 多维立方体CUBE
在Bi领域,cube是一个非常重要的概念,是多维立方体的简称,主要是用于支持联机分析应用(OLAP),为企业决策提供支持.Cube就像一个坐标系,每一个Dimension代表一个坐标系,要想得到一个一 ...
- 从html5标准的正式发布到国内CMS的变革
10月底万维网联盟(W3C)宣布,经过将近8年的艰辛努力,HTML5标准规范终于最终制定完成并正式发布. W3C的正式批准让人们对HTML5更有信心.“这是一个里程碑,标志着很多人员在长达七年时间内投 ...
- Dumpbin的使用方法
推荐:http://blog.csdn.net/blpluto/article/details/5706757
- linux重定向总结:如何将shell命令的输出信息自动输出到文件中保存
在做批量实验室,例如跑批量MR的作业,我们会写好shell脚本,然后启动脚本,等所有作业执行完再去看结果,但是这些执行时的信息如何保存下来到文件中呢?下面这个命令可以完成这个任务. sh batchj ...
- HDU-1255 覆盖的面积 覆盖的矩形面积并
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1255 需要保存区间覆盖线>=2的线段的长度,根据情况来更新... //STATUS:C++_AC ...
- 问题-[Delphi]在对GRID设置单击为编辑时,其他GRID可以,但有一个GRID不行?
问题现象:在对GRID设置单击为编辑时,其他GRID可以,但有一个GRID不行?问题原因:在这个GRID中的单击事件可能不存在,可以测试一下有没有单击事件.解决方法:需要在GRID的上一个类中,放开单 ...