Android之SQLite总结
SQLite 是一个轻量级的数据库,常用于各种嵌入式设备当中。
android 提供了SQLiteOpenHelper的抽象类用于帮助开发数据库。
在实际使用中经常定义一个类继承SQLiteOpenHelper,并重写构造方法,onCreate()方法和 onUpdate()的方法;
//注意:上面三个方法必须重写:重写构造方法一般用于初始化
onCreate()方法:
onUpdate()用于数据库版本的更新时调用,只在数据库更新时调用一次。
如:MySQLiteHelper类继承SQLiteOpenHelper
// MySQLiteOpenHelper extends SQLiteOpenHelper;
//MySQLiteOpenHelper myhelper;
myhelper = new MySQLiteOpenHelper(contenext);
** SQLiteDatabase是直接操作数据库的对象,可以使用SQLiteOpenHelper的 getReadableDatabase
或getWritableDatabase方法得到SQLiteDatabase对象。
//SQLiteDatabase db = myhelper.getReadableDatabase();
//注意:只有调用了getReadableDatabase()或getWritableDatabase方法,才算真正创建了数据库,接下来就可以使用数据库的各种方法,
处理数据;
查询结果的返回值:Cursor cursor ;Cursor相当于结果集ResulytSet;
Cursor是一个游标接口,提供了遍历查询结果的方法,如移动指针方法move(),获得列值方法getString()等.
总结:使用SQLite的一般步骤:
a:自定义一个继承SQLiteOpenHelper的类,然后使用数据库帮助类的对象调用getReadableDatabase()或getWritableDatabase方法创建数据库
b: 对数据库db进行增删改查的操作
c:对于查询的结果集储存在Cursor中。
d:数据库db和结果集Cursor使用完毕后注意调用close的方法来释放资源
http://wenku.baidu.com/view/423a00dca58da0116c17491e.html
//该文档比较长比较详细
package com.itheima.db; import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.view.View; public class PersonSQLiteOpenHelper extends SQLiteOpenHelper {
/*数据库的构造方法,
用来定义数据库的名称,
数据库的结果集和数据库的版本
创建出一个Person的数据库
*/
public PersonSQLiteOpenHelper(Context context) {
super(context, "Person.db", null, 1);
/*
* 一共四个参数,每个参数的含义:1.context上下文,一般都需要
2:数据库的名字
游标工厂:移动的指针指向结果集,一般游标工厂用null;
version:代表数据库的版本。从1开始的,一般使用1;
*/
} /*
* 在数据库第一次创建的时候使用onCreate(),
* 一般用来创建数据库的表结构和存一些初始化的表参数
* 传入的参数db代表被创建的数据库
* */
@Override
public void onCreate(SQLiteDatabase db) { //初始化表结构
db.execSQL("create table person (id integer primary key autoincrement,name varchar(20),number varchar(20))");
//注意:SQLite 实际上是一个嵌入式的数据库,没有MySQL那么多的数据类型。 } @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub } }
以上代码是创建了一个继承了SQLiteOpenHelper的类。
package com.itheima.db.dao; import java.util.ArrayList;
import java.util.List; import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase; import com.itheima.db.PersonSQLiteOpenHelper;
import com.itheima.db.domain.Person; public class PersonDao {
//因为要对helper进行操作,所以该类需要有一个helper的对象
private PersonSQLiteOpenHelper helper;
public PersonDao(Context context){
helper = new PersonSQLiteOpenHelper(context); }
//任何一个函数的构造方法都要传入context的对象,因为context相当于全局变量为整个应用的接口
//这样写代码的好处,在构造方法中已经将personhelper初始化
//养成习惯:只要一拿到数据库就在后面写上close的方法。
public void insert(String name , String num){
SQLiteDatabase db = helper.getWritableDatabase();
db.execSQL("insert into person (name,number) vlaues(?,?) ",new Object[]{name ,num});
db.close();
}
//数据库db,只有在helper调用了getWritableDatabase()或者getReadableDatabase()的方法后才会被创建出来
//使用任何一个数据库最后都要关闭数据库来释资源,所以当你在开始创建数据库的时候就直接关闭数据库以防忘记
//数据库db可以调用execSQl的方法来执行SQL语句,SQL语句中的?代表了占位符可以用参数实现 public void delete(String name){
SQLiteDatabase db = helper.getWritableDatabase();
db.execSQL("delete from person where name =?",new Object[]{name}); db.close();
} public void update(String name ,String newname ){ SQLiteDatabase db = helper.getWritableDatabase();
db.execSQL("update person set name =? where name =?",new Object[]{name,newname} );
db.close(); }
public boolean find(String name){
SQLiteDatabase db = helper.getReadableDatabase();
Cursor cursor = db.rawQuery("select * from person where name = ?", new String[]{name});
boolean result = cursor.moveToNext();
cursor.close();
db.close();
return result;
}
//cursor使用完也要关闭来释放资源。cursor的常用方法要掌握
public List<Person> findAll(){
SQLiteDatabase db = helper.getReadableDatabase();
Cursor cursor = db.rawQuery("select * from person",null);
List<Person> list = new ArrayList<Person>();
while(cursor.moveToNext()){ int id = cursor.getInt(0);
String name = cursor.getString(1);
String number = cursor.getString(2);
Person p = new Person(name,number,id);
list.add(p); }
cursor.close();
db.close();
return list; }
}
//以上是使用SQL语句是实现的增删改查
//可以使用Android 提供的API来实现增删改查的
//使用SQL语句比较麻烦,会出现一些小细节的错误
编写一个Dao类用于操作数据库。
package com.itheima.db.domain;
public class Person {
private String name;
private String number;
private int id;
public Person(String name, String number, int id) {
super();
this.name = name;
this.number = number;
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
//创建PersonBean类来封装查询到的结果,快捷键右键source,生成getter 和setter的方法,右键source还可以生成构造方法
//一般 构造方法的作用是初始化对象参数值
//自定义了一个Person类用来封装查询结果。
package com.itheima.db; import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem; public class MainActivity extends ActionBarActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
PersonSQLiteOpenHelper helper = new PersonSQLiteOpenHelper(this);
/* //只执行以上代码实际数据库并没有被创建出来,单纯的new出来了一个对象
helper.getReadableDatabase();
helper.getWritableDatabase();
//只有执行以上的两种方法中任意一种数据库才被创建出来
*/
helper.getReadableDatabase();
return true;
} @Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
//主函数
Android之SQLite总结的更多相关文章
- Android之SQLite数据存储
一.SQLite保存数据介绍 将数据库保存在数据库对于重复或者结构化数据(比如契约信息)而言是理想之选.SQL数据库的主要原则之一是架构:数据库如何组织正式声明.架构体现于用于创建数据库的SQL语句. ...
- android安卓Sqlite数据库实现用户登录注册
看了很多别人写的安卓SQlite数据的操作代码,一点也不通俗易懂,我觉得我写的不错,而且安卓项目也用上了,所以在博客园里保存分享一下!建立一个类 并继承SQLiteOpenHelper public ...
- Android中SQLite数据库小计
2016-03-16 Android数据库支持 本文节选并翻译<Enterprise Android - Programing Android Database Applications for ...
- android 对sqlite数据库的增删改查等各种操作
转载:http://blog.csdn.net/vrix/article/details/6717090 package com.sqlite.main; import java.io.File; i ...
- Android学习---SQLite数据库的增删改查和事务(transaction)调用
上一篇文章中介绍了手工拼写sql语句进行数据库的CRUD操作,本文将介绍调用sqlite内置的方法实现CRUD操作,其实质也是通过拼写sql语句. 首先,创建一个新的android项目: 其次,查看代 ...
- android数据库SQLite的设计模式
Dao设计模式可能是使用最多的数据库的设计模式其基本思路是将数据库操作的代码 与设计代码分离以便于维护和升级.具体的实现方法是使用包,然后在设计代码中调 用数据库的操作代码,dao设计模式需要创建5个 ...
- Android使用SQLite数据库(2)
打开SQLite数据库,首先要建立一个DatabaseHelper类的实例,然后,再获得数据库: DatabaseHelper mDBH; SQLiteDatabase db; mDBH = new ...
- 我的Android六章:Android中SQLite数据库操作
今天学习的内容是Android中的SQLite数据库操作,在讲解这个内容之前小编在前面有一篇博客也是讲解了SQLite数据库的操作,而那篇博客的讲解是讲述了 如何在Window中通过DOM来操作数据库 ...
- Android和SQLite版本对应关系
Android和SQLite版本对应关系 今天Xamarin群有人问到Android和SQLite版本如何对应,顺手查了一下,贴出来. SQLite 3.8.4.3: • 21-5.0-Lollipo ...
- Android中SQLite应用详解
上次我向大家介绍了SQLite的基本信息和使用过程,相信朋友们对SQLite已经有所了解了,那今天呢,我就和大家分享一下在Android中如何使用SQLite. 现在的主流移动设备像Android.i ...
随机推荐
- 2017.9.16 Web 应用开发环境搭建与开发工具安装
1.JDK的下载与安装 1.1 在网址:http://javase/downloads/index.jsp网站下载最新的JDK版本 1.2 安装jdk,双击下载好的.exe文件运行,一般默认安装在c盘 ...
- 第15章 RCC—使用HSE/HSI配置时钟—零死角玩转STM32-F429系列
第15章 RCC—使用HSE/HSI配置时钟 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku. ...
- Java Web入门经典扫描版
全书共分4篇19章,其中,第一篇为“起步篇”,主要包括开启JavaWeb之门.不可不知的客户端应用技术.驾驭JavaWeb开发环境.JavaWeb开发必修课之JSP语法等内容:第二篇为“核心篇”,主要 ...
- 网际协议 IP
网际协议 网际协议(internet protocol),简称IP; 概念:TCP/IP网络体系结构中网际层的协议.用以提供无连接的数据服务. 1.IP地址的概念及组成 概念:IP地址就是用来唯一标 ...
- postgresql 免安装版使用
免安装版 postgresql 使用 1.首先使用 initdb 初始化数据目录 initdb --pgdata=data --encoding=UTF8 --locale=C 2.启动 postgr ...
- 【iOS】史上最全的iOS持续集成教程 (下)
:first-child{margin-top:0!important}.markdown-body>:last-child{margin-bottom:0!important}.markdow ...
- FAT32中文版分析+补充(1)
概述 起先所有的FAT文件系统都是为IBM PC机器而设计的,这说明了一个重要的问题:FAT文件系统在磁盘上的数据是用“小端”(Little Endian)结构存储的.我们使用4个8-bit的字节—— ...
- Linux-日期时间相关命令
获取当前时间 date [root@VM_0_3_centos ~]# date Mon Mar 18 19:13:33 CST 2019 [root@VM_0_3_centos ~]# date相关 ...
- [Ljava.lang.String; cannot be cast to java.lang.String报错的原因
完整错误信息: java.lang.ClassCastException: [Ljava.lang.String; cannot be cast to java.lang.String 报这个错的原因 ...
- 使用windows api安装windows服务程序(C#)
3个步骤: 1.安装器代码编写 2.安装器工具类编写 1)安装.启动服务) 2)卸载服务 3.windows服务程序编写(参考:多线程.方便扩展的Windows服务程序框架) 4.代码下载,在文末(注 ...