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 ...
随机推荐
- app上线
不管第一次还是第二次APP上线都需要三样东西:开发者证书,appID,描述文件
- Spring 远程调用工具类RestTemplateUtils
Spring 远程调用Rest服务工具类,包含Get.Post.Put.Delete四种调用方式. 依赖jar <dependency> <groupId>org.spring ...
- Java 序列化对象工具类
SerializationUtils.java package javax.utils; import java.io.ByteArrayInputStream; import java.io.Byt ...
- C# 命名空间与语句
C#采用命名空间(namespace)来组织程序.命名空间可以嵌套.using指示符可以用来简化命名空间类型的引用.using指示符有两种用法."using System;"语句可 ...
- SqlServer中怎么删除重复的记录(表中没有id)
SqlServer中怎么删除重复的记录(表中没有id) 其实我在别的网址也查到过删除重复的记录,不知道我是我SqlServer2012版本太低还是啥原因 delete from scwhere (c# ...
- 没有CTO的Netflix有哪些值得我们学习的工程文化?
作者介绍: 杨波,拍拍贷基础框架研发总监.具有超过 10 年的互联网分布式系统研发和架构经验,曾先后就职于:eBay 中国研发中心(eBay CDC),任资深研发工程师,参与亿贝开放 API 平台研发 ...
- springMVC-数据绑定
定义: 将http请求中参数绑定到Handler业务方法 常用数据绑定类型 1. 基本数据类型 不能为其它类型和null值 2. 包装类 可以为其它对象,全部转成null值 3. 数组 多个对象 ...
- 转:SpringCloud服务注册中心比较:Consul vs Zookeeper vs Etcd vs Eureka
原文链接地址:http://luyiisme.github.io/2017/04/22/spring-cloud-service-discovery-products/ 这里就平时经常用到的服务发现的 ...
- hosts 文件的位置及作用
一.位置 1.Window系统位置 C:\Windows\System32\drivers\etc 2.Linux系统位置 /etc/hosts 二.作用 综述:Hosts文件中指定了域名和IP地址的 ...
- Unexpected exception parsing XML document from ServletContext resource [/WEB-INF/config/springdemo-config.xml]
org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML doc ...