Android SQLite数据库操作示例

SQLite介绍

SQLite是一个非常流行的嵌入式数据库,它支持SQL语言,并且只利用很少的内存就有很好的性能。此外,它还是开源的,任何人都可以使用它。

SQLite由以下几个组件组成:SQL编译器、内核、后端以及附件。SQLite通过利用虚拟机和虚拟数据库引擎(VDBE),使调试、修改和扩展SQLite的内核变得更加方便。

SQLite支持的数据类型参考链接:http://blog.csdn.net/wzy_1988/article/details/36005947

Android在运行时(run-time)集成了SQLite,所以每个Android应用程序都可以使用SQLite数据库。对于熟悉SQL的开发人员来说,在Android开发中使用SQLite相当简单。但是,由于JDBC会消耗太多的系统资源,所以JDBC对于手机这种内存受限设备来说并不合适。因此,Android提供了一些新的API来使用SQLite数据库。

数据库存储在/data/data/项目包名/databases/ 目录下。

Android开发中使用SQLite数据库

Activity可以使用Content Provider或者 Service访问一个数据库。

创建数据库

Android不自动提供数据库。在Android应用程序中使用SQLite,必须自己创建数据库,然后创建表、索引、填充数据。Android提供了一个SQLiteOpenHelper帮助你创建一个数据库,你只要继承 SQLiteOpenHelper 类,就可以轻松的创建数据库。SQLiteOpenHelper 类根据开发应用程序的需要,封装了创建和更新数据库使用的逻辑。SQLiteOpenHelper 的子类,至少需要实现三个方法:

  • 构造函数,调用父类SQLiteOpenHelper的构造函数。这个方法需要四个参数:上下文环境,数据库名字,一个可选的游标工厂(通常是NULL),一个代表你正在使用的数据库模型版本的整数。
  • onCreate()方法,它需要一个SQLiteDatabase对象作为参数,根据需要对这个对象填充表和初始化数据。
  • onUpgrade()方法,它需要三个参数,一个SQLiteDatabase对象,一个旧的版本号和一个新的版本号,这样你就可以清楚如何把一个数据库从旧的模型转变为新的模型。

下面代码展示了如何继承SQLiteOpenHelper创建数据库:

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class MyDBHelper extends SQLiteOpenHelper {
	private static final String COLUMN_ID = "_id";
	public static final String TABLE_NAME = "category";
	private static final String DATABASE_NAME = "category.db";
	private static final int DATABASE_VERSION = 1;

	private static final String DATABASE_CREATE = "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + "(" + COLUMN_ID
			+ " INTEGER PRIMARY KEY AUTOINCREMENT, " + " fid TEXT, token TEXT, cid TEXT, cname TEXT)";

	public CategoryDBHelper(Context context) {
		super(context, DATABASE_NAME, null, DATABASE_VERSION);
	}

	@Override
	public void onCreate(SQLiteDatabase db) {
		db.execSQL(DATABASE_CREATE);
	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		db.execSQL("DROP TABLE IF EXISTS" + TABLE_NAME);
		onCreate(db);
	}
}

增删改查数据库

因为SQLite支持标准的SQL语句,因此我们可以用标准SQL语句才增删改查数据库,推荐使用占位符的sql语句,看起来更加清爽,下面是我的代码示例:

public class CategoryDBManager {
	private MyDBHelper myDBHelper;

	private static CategoryDBManager categoryDBManager = null;

	private CategoryDBManager(Context context) {
		myDBHelper = new MyDBHelper(context);
	}

	/**
	 * 单例模式
	 */
	public static CategoryDBManager getInstance(Context context) {
		if (categoryDBManager == null) {
			synchronized (CategoryDBManager.class) {
				if (categoryDBManager == null) {
					categoryDBManager = new CategoryDBManager(context);
				}
			}
		}

		return categoryDBManager;
	}

	public SQLiteDatabase getDB() {
		SQLiteDatabase db = myDBHelper.getWritableDatabase();

		while (db.isDbLockedByCurrentThread()) {
		}
		return db;
	}

	public void insertLists(String token, String fid, List<PlateCategoryData> lists) {
		// 打开可写数据库
		SQLiteDatabase db = getDB();

		for (PlateCategoryData pd : lists) {
			// 执行SQL语句,替换占位符
			db.execSQL("insert into " + MyDBHelper.TABLE_NAME + "(cid, cname, fid, token) values(?, ?, ?, ?)",
					new Object[] { pd.getId(), pd.getName(), fid, token });
		}

		// 释放资源
		db.close();
	}

	public ArrayList<PlateCategoryData> getLists(String fid, String token) {
		ArrayList<PlateCategoryData> datas = new ArrayList<PlateCategoryData>();
		SQLiteDatabase db = getDB();
		// 执行原始查询,得到cursor
		String querySql = "select cid, cname from " + MyDBHelper.TABLE_NAME + " where fid = ? and token = ?";
		Cursor cursor = db.rawQuery(querySql, new String[] { fid, token });

		// 移动cursor到第一个数据(无数据返回false)
		if (cursor.moveToFirst()) {
			// while判断是否有下一条数据
			do {
				PlateCategoryData pd = new PlateCategoryData(cursor.getString(cursor.getColumnIndex("cid")),
						cursor.getString(cursor.getColumnIndex("cname")));
				datas.add(pd);
			} while (cursor.moveToNext());
		}

		cursor.close();
		db.close();

		return datas;
	}

	public void updateLists(String fid, String token, ArrayList<PlateCategoryData> datas) {
		SQLiteDatabase db = getDB();

		for (PlateCategoryData pd : datas) {
			String sql = "update " + MyDBHelper.TABLE_NAME
					+ " set cid = ?, cname = ? where fid = ? and token = ?";
			db.execSQL(sql, new Object[] { pd.getId(), pd.getName(), fid, token });
		}

		db.close();
	}

	public void deleteLists(String fid, String token) {
		SQLiteDatabase db = getDB();

		db.execSQL("delete from " + MyDBHelper.TABLE_NAME + " where fid = ? and token = ?", new Object[] { fid,
				token });

		db.close();
	}

	public void closeDB() {
		SQLiteDatabase db = getDB();

		if (db.isOpen()) {
			myDBHelper.close();
			db.close();
		}
	}
}

参考链接

[1] http://www.ibm.com/developerworks/cn/opensource/os-cn-sqlite/

Android SQLite数据库操作示例

时间: 2024-07-30 23:57:08

Android SQLite数据库操作示例的相关文章

Android SQLite数据库使用示例

简单介绍一下,现在的主流移动设备像Android.iPhone等都使用SQLite作为复杂数据的存储引擎,在我们为移动设备开发应用程序时,也许就要使用到SQLite来存储我们大量的数据,所以我们就需要掌握移动设备上的SQLite开发技巧.对于Android平台来说,系统内置了丰富的API来供开发人员操作SQLite,我们可以轻松的完成对数据的存取. 下面我们用SQLite来开发一个英语词典.下图是项目结构-- MySQLite.java package sn.qdj.sqlitedemo; im

android sqlite数据库操作

sqlite有一点不同于其他常见数据库,就是sqlite数据库是存成文件的,可以直接把该文件从手机里导出来,以文件的形式存在,然后放到电脑上查看. Android操作数据库有如下步骤: 1.继承SQLiteOpenHelper,实现里面的方法. public class MyDbHelper extends SQLiteOpenHelper {     public MyDbHelper(Context context) {         super(context, "db3", 

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

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

【Android】实验8 SQLite数据库操作2016.5.13

实验8  SQLite数据库操作 [目的] 设计一个个人通讯录,掌握Android平台下的数据库开发,该个人通讯录主要包括联系人列表和联系人详细信息等界面. [要求] 程序主界面是通讯录的目录显示手机上联系人的名称.点击联系人的姓名可以显示联系人的详细信息.在按了MEMU键之后会弹出菜单栏.单击菜单栏上的按钮可以添加联系人和删除联系人 [过程] (1)确定数据库的数据结构.本程序只要一张表,该表的内容及说明如下表所示 字段名称 数据类型 说明 字段名称 数据类型 声明 _id Integer 所

Android Sqlite的操作

1.写一个类继承SQLiteOpenHelper public class MyHelper extends SQLiteOpenHelper { public MyHelper(Context context) { super(context, Const.DB_DBNAME , null, Const.DB_VERSION); // TODO Auto-generated constructor stub } @Override public void onCreate(SQLiteData

C# SQLite 数据库操作

C# SQLite 数据库操作学习 运行环境:Window7 64bit,.NetFramework4.61,C# 7.0: 编者:乌龙哈里 2017-03-19 参考: SQLite 官网 SQL As Understood By SQLite System.Data.SQLite 菜鸟教程 SQL 教程 章节: 1.下载安装 2.数据类型 3.创建数据库 4.删除数据库 5.创建表 6.删除表 7.查询表结构 8.更改表名 9.增加列(字段) 10.读取创建表的 SQL 语句 11.更改列名

Android SQLite数据库基本操作

程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能.而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库.那么就来看一下在Android程序中怎么去操作SQLite数据库来实现一些需求的吧,仍然以一个小例子开始: 在创建Android项目之前,我们应该想一下我们要定义的数据库的相关信息和里面的表格的相关信息,为了日后数据库的更新更加方便 ,我们可以用一个专门的类保存数据库的相关信息,以后如果要更新数据库的话只需要该动这个类

windows phone 8.1开发SQlite数据库操作详解

原文出自:http://www.bcmeng.com/windows-phone-sqlite1/ 本文小梦将和大家分享WP8.1中SQlite数据库的基本操作:(最后有整个示例的源码)(希望能通过本站广告支持小梦,谢谢!) 建立数据库 增加数据 删除数据 更改数据 查询数据 (注:为了让每个操作都能及时显示在UI上,所以进行了数据绑定.数据绑定会在后面文章专门讲解,先给出数据类Note,代表一个笔记.含有Name 和content  属性.其代码如下:如果不清楚,我会在之后讲解): names

安卓 SQLite数据库操作实例

前段时间写了个安卓平台下SQLite数据库操作的实例 ,一直没得时间总结 ,今天把它弄出来了. 在Android 运行时环境包含了完整的 SQLite. 首先介绍一下SQLite这个数据库: SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了.它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tc