Sqlite数据库相关操作

1  数据库思路
(1)可把表中的字段用javabean来实现
(2)在数据库和ContentProvider结合使用时,不采用此处SQLiteDatabase的execSQL()和rawQuery()方法来实现数据的增删改查而是使用了SQLiteDatabase的自带的update(),delete(),query()等方法.因为两者的参数基本一致,直接从ContentProvider传递给这些自带方法即可

2  SQLiteOpenHelper的引入
我们在编写数据库应用软件时,需要考虑这样的问题:因为软件可能会安装在很多用户的手机上.
如果应用使用到了SQLite数据库,我们必须在用户初次使用软件时创建出应用使用到的数据库表结构及添加一些初始化记录,另外在软件升级的时候,也需要对数据表结构进行更新。
那么,我们如何才能实现在用户初次使用或升级软件时自动在用户的手机上创建出应用需要的数据库表呢?总不能让我们在每个需要安装此软件的手机上通过手工方式创建数据库表吧?(这也是为什么它叫……OpenHelper的原因)
于是可以复写SQLiteOpenHelper的onCreate()和onUpgrade()方法以在创建数据库和数据库版本发生变化时自动调用。

3  DataBaseOpenHelper 的使用
DataBaseOpenHelper的实例dataBaseOpenHelper可以dataBaseOpenHelper.getWritableDatabase()和dataBaseOpenHelper.getWritableDatabase()的方式返回数据库SQLiteDatabase的实例db。这两种方式有什么区别呢?查看源代码可知:getReadableDatabase在不出错的时候其实际返回的是getWritableDatabase.那么什么时候会出错呢?
数据库的磁盘空间满了,数据库此时只可以读而不可以写,所以不可以用读写(可以进行读和写操作)方式打开数据库。这个时候就会报错;所以只可以用只读方式打开数据库。
因此在出错的时候,返回的是getReadableDatabase()!!!

4  数据库的增删改查操作
利用SQLiteDatabase的实例db进行数据库的增删改查操作.其中db.execSQL()来执行更改行为的语句;db.rawQuery()来执行查询语句
注意:
(1)在SQL语句中最好使用占位符,这样来提高SQL语句的安全性
(2)public void execSQL (String sql, Object[] bindArgs)第二个参数是Object数组
(3)public Cursor rawQuery (String sql, String[] selectionArgs)第二个参数是String数组

增加示例:
db.execSQL("insert into person (name,phone) values(?,?)",new Object[]{person.getName(),person.getPhone()});

更新示例:
public void update(Person person){
   SQLiteDatabase db=openHelper.getWritableDatabase();
   db.execSQL("update person set name=?,phone=? where personid=?",new Object[]{person.getName(),person.getPhone(),person.getId()});
 }

删除示例:
public void delete(int i){
        SQLiteDatabase db=openHelper.getWritableDatabase();
          db.execSQL("delete from person where personid=?",new Object[]{String.valueOf(i)});
 } 

查找示例:

public Person find(int personId){
		SQLiteDatabase db=openHelper.getWritableDatabase();
		Cursor cursor=db.rawQuery("select * from person where personid=?", new String[]{String.valueOf(i)});
		while(cursor.moveToFirst()){
			int personid=cursor.getInt(cursor.getColumnIndex("personid"));
			String name=cursor.getString(cursor.getColumnIndex("name"));
			String phone=cursor.getString(cursor.getColumnIndex("phone"));
			return new Person(personid, name, phone);
		}
		cursor.close();
		return null;
	}

注意:
(1)db.rawQuery()的结果是一个cursor结果集.其指针最开始时候执行指向结果集的上方,即第一条纪录的前面
(2)取值操作:cursor.get具体类型(参数为某列的名称的索引值)
(3)最后关闭cursor

统计示例:

public int count(){
		SQLiteDatabase db=openHelper.getReadableDatabase();
		Cursor cursor=db.rawQuery("select count(*) from person", null);
		int i=0;
		while(cursor.moveToFirst()){
		     i=cursor.getInt(0);
		     break;
		}
		return i;
	}

 

分页示例: 

public List<Person> page(int offset,int resuletNumber){
		SQLiteDatabase db=openHelper.getWritableDatabase();
		ArrayList<Person> persons=new ArrayList<Person>();
		Person person;
		Cursor  cursor=db.rawQuery("select * from person limit ?,?",new String []{String.valueOf(offset),String.valueOf(resuletNumber)});
		while(cursor.moveToNext()){
			int personid=cursor.getInt(cursor.getColumnIndex("personid"));
			String name=cursor.getString(cursor.getColumnIndex("name"));
			String phone=cursor.getString(cursor.getColumnIndex("phone"));
			person=new Person(personid, name, phone);
			persons.add(person);
		}
		return persons;
	  }

5 数据库事务

public void payment(){
		SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
		db.beginTransaction();
		try{
			db.execSQL("update person set amount=amount-10 where personid=1");
			db.execSQL("update person set amount=amount+10 where personid=2");
			db.setTransactionSuccessful();//设置事务的标志为成功
		}finally{
			db.endTransaction();//结束事务,默认情况下是回滚事务
		}
	}

结束事务有两种:提交事务和回滚事务。默认情况是回滚事务!!!
事务是否提交是由事务的标志来决定的,如果事务的标志位失败(false),那么就回滚事务,否则(true)提交事务。
所以默认情况下事务的标志为失败(false),事务回滚.
为什么要把结束事务放在finally里面?
若不这样当事务发生异常,便不会往下执行了,数据库要等到一个超时后才会结束事务而影响性能,所以在finally里将其结束

时间: 2025-01-27 20:26:37

Sqlite数据库相关操作的相关文章

从C#到Objective-C,循序渐进学习苹果开发(7)--使用FMDB对Sqlite数据库进行操作

本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验.本篇主要开始介绍基于XCode进行IOS程序的开发,介绍使用FMDB对Sqlite数据库进行操作,以及对数据库操作类进行抽象设计,以期达到重用.简化.高效开发的目的. 在.NET领域开发了很多年,一般常见的项目都需要操作数据库,包括有Oracle.SqlServer.Mysql.Sqlite.Access等数据库,这些数据库是

使用iOS原生sqlite3框架对sqlite数据库进行操作

使用iOS原生sqlite3框架对sqlite数据库进行操作 一.引言       sqlite数据库是一种小型数据库,由于其小巧与简洁,在移动开发领域应用深广,sqlite数据库有一套完备的sqlite语句进行管理操作,一些常用的语句和可视化的开发工具在上篇博客中有介绍,地址如下: sqlite数据库常用语句及可视化工具介绍:http://my.oschina.net/u/2340880/blog/600820.       在iOS的原生开发框架中可以对sqlite数据库进行很好的支持,这个

PDO对mysql数据库相关操作

PDO是一个"数据库访问抽象层",作用是统一各种数据库的访问接口,与mysql和mysqli的函数库相比,PDO让跨数据库的使用更具有亲和力:与ADODB和MDB2相比,PDO更高效. 目前而言,实现"数据库抽象层"任重而道远,使用PDO这样的"数据库访问抽象层"是一个不错的选择. 一.PDO基本函数库 PDO->beginTransaction() 标明回滚起始点 PDO->commit 标明回滚结束点,并执行SQL PDO->

自己封装的ASP.NET的SQLITE数据库的操作类

代码 /*  * 作者: 牛腩  * 创建时间: 2010-1-20 10:43:14  * Email: 164423073@qq.com  * 说明: 对SQLite数据库的增删查改操作的封装类  */ using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data;using System.Data.SQLite;using System.Web.Conf

ASP.NET中对SQLITE数据库进行插入操作后返回自增的ID

 啥也不说了,刚刚研究出来滴~~~贴码:         /// <summary>插入        /// 返回刚刚插入的ID        /// </summary>        /// <param name="groupname"></param>        /// <param name="gid"></param>        /// <returns><

将备份的SQLServer数据库转换为SQLite数据库操作方法_MsSql

操作方法:先要安装好SQLServer2005,并且记住安装时自己设置的用户名和密码.下面以恢复SQLServer下备份的数据库文件epdmdb20101008.bak为SQLite数据库为例来说明操作的步骤. ① 打开SQLServer2005,如下图所示: 在登陆界面输入登录名和密码,点"连接". 登录之后的界面如下: ② 新建一个数据库. 点左边导航栏的数据库,右键-新建数据库:如下图所示: 在弹出的新建数据库窗口中输入"数据库名称",点"添加&qu

将备份的SQLServer数据库转换为SQLite数据库操作方法

操作方法:先要安装好SQLServer2005,并且记住安装时自己设置的用户名和密码.下面以恢复SQLServer下备份的数据库文件epdmdb20101008.bak为SQLite数据库为例来说明操作的步骤. ① 打开SQLServer2005,如下图所示: 在登陆界面输入登录名和密码,点"连接". 登录之后的界面如下: ② 新建一个数据库. 点左边导航栏的数据库,右键-新建数据库:如下图所示: 在弹出的新建数据库窗口中输入"数据库名称",点"添加&qu

Android SQLite数据库操作代码类分享_Android

使用示例: package cn.hackcoder.beautyreader.db; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; /** * Created by hackcoder on 15-1-25. */ public clas

[Android] SQLite数据库之增删改查基础操作

    在编程中经常会遇到数据库的操作,而Android系统内置了SQLite,它是一款轻型数据库,遵守事务ACID的关系型数据库管理系统,它占用的资源非常低,能够支持Windows/Linux/Unix等主流操作系统,同时能够跟很多程序语言如C#.PHP.Java等相结合.下面先回顾SQL的基本语句,再讲述Android的基本操作. 一. adb shell回顾SQL语句     首先,我感觉自己整个大学印象最深的几门课就包括<数据库>,所以想先回顾SQL增删改查的基本语句.而在Androi