`
keeponmoving
  • 浏览: 112489 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android SQLite数据库操作实例

 
阅读更多

     Android的自带数据库SQLite小巧且功能强大,Android提供了两种方式去操作数据库,第一种是用SQL语句去操作数据,SQLite支持标准的SQL,其分页等操作与Mysql一样,以下是利用SQL操作SQLite:

import java.util.ArrayList;
import java.util.List;

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

public class PersonDaoClassic {
	private DBOpenHelper helper;

	public PersonDaoClassic(Context context) {
		helper = new DBOpenHelper(context);
	}

	public void insert(Person p) {
		// 打开可写数据库
		SQLiteDatabase db = helper.getWritableDatabase();		
		
		// 执行SQL语句, 替换占位符
		db.execSQL("INSERT INTO person(name, balance) VALUES(?, ?)", new Object[] { p.getName(), p.getBalance() });
		
		// 释放资源
		db.close();
	}

	public void delete(int id) {
		SQLiteDatabase db = helper.getWritableDatabase();
		db.execSQL("DELETE FROM person WHERE id=?", new Object[] { id });
		db.close();
	}

	public void update(Person p) {
		SQLiteDatabase db = helper.getWritableDatabase();
		db.execSQL("UPDATE person SET name=?, balance=? WHERE id=?", new Object[] { p.getName(), p.getBalance(), p.getId() });
		db.close();
	}

	public Person query(int id) {
		SQLiteDatabase db = helper.getReadableDatabase();
		
		// 执行原始查询, 得到一个Cursor(类似ResultSet)
		Cursor c = db.rawQuery("SELECT name, balance FROM person WHERE id=?", new String[] { String.valueOf(id) });
		Person p = null;
		
		// 判断Cursor是否有下一条记录
		if (c.moveToNext())
			// 从Cursor中获取数据, 创建Person对象
			p = new Person(id, c.getString(0), c.getInt(1));
		
		// 释放资源
		c.close();
		db.close();
		return p;
	}

	public List<Person> queryAll() {
		SQLiteDatabase db = helper.getReadableDatabase();
		Cursor c = db.rawQuery("SELECT id, name, balance FROM person", null);
		List<Person> persons = new ArrayList<Person>();
		while (c.moveToNext())
			persons.add(new Person(c.getInt(0), c.getString(1), c.getInt(2)));
		c.close();
		db.close();
		return persons;
	}
	
	public List<Person> queryPage(int pageNum, int capacity) {		
		// 开始索引
		String start = String.valueOf((pageNum - 1) * capacity);
		// 查询的个数
		String length = String.valueOf(capacity);
		
		SQLiteDatabase db = helper.getReadableDatabase();
		
		// 翻页查询语句, 和MySQL中相同
		Cursor c = db.rawQuery("SELECT id, name, balance FROM person LIMIT ?,?", new String[]{start, length});
		List<Person> persons = new ArrayList<Person>();
		while (c.moveToNext())
			persons.add(new Person(c.getInt(0), c.getString(1), c.getInt(2)));
		c.close();
		db.close();
		return persons;
	}
	
	public int queryCount() {
		SQLiteDatabase db = helper.getReadableDatabase();
		
		// 查询记录条数
		Cursor c = db.rawQuery("SELECT COUNT(*) FROM person", null);
		c.moveToNext();
		int count =c.getInt(0); 
		c.close();
		db.close();
		return count;
	}

}

      除上述方法以外,android还给我们带来了另外一种更加简单,也是android推荐使用的一种方式,此种方式把数据封装在ContentValues中,因为android编程过程中经常会使用到已经封装好了数据的ContentValues,所以使用第二种方式在有些时候更加便捷,以下是代码:

package cn.itcast.sqlite;

import java.util.ArrayList;
import java.util.List;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

public class PersonDao {
	private DBOpenHelper helper;

	public PersonDao(Context context) {
		helper = new DBOpenHelper(context);
	}
	
	public void remit(int from, int to, int amount) {
		SQLiteDatabase db = helper.getWritableDatabase();	
		
		// 开启事务
		db.beginTransaction();
		try {
			db.execSQL("UPDATE person SET balance=balance-? WHERE id=?", new Object[]{amount, from});
			db.execSQL("UPDATE person SET balance=balance+? WHERE id=?", new Object[]{amount, to});
			db.setTransactionSuccessful();
		} catch (Exception e) {
			e.printStackTrace();
		}
		// 结束事务, 将事务成功点前面的代码提交
		db.endTransaction();
		
		db.close();
	}

	public void insert(Person p) {
		SQLiteDatabase db = helper.getWritableDatabase();	
		
		// 准备数据
		ContentValues values = new ContentValues();
		values.put("name", p.getName());
		values.put("balance", p.getBalance());
		
		// 通过ContentValues中的数据拼接SQL语句, 执行插入操作, id为表中的一个列名
		db.insert("person", "id", values);		
		
		db.close();
	}

	public void delete(int id) {
		SQLiteDatabase db = helper.getWritableDatabase();
		
		// 执行删除操作, 在person表中删除id为指定值的记录
		db.delete("person", "id=?", new String[]{String.valueOf(id)});
		
		db.close();
	}

	public void update(Person p) {
		SQLiteDatabase db = helper.getWritableDatabase();

		// 要更新的数据
		ContentValues values = new ContentValues();
		values.put("name", p.getName());
		values.put("balance", p.getBalance());

		// 更新person表中id为指定值的记录
		db.update("person", values, "id=?", new String[] { String.valueOf(p.getId()) });
		
		db.close();
	}

	public Person query(int id) {
		SQLiteDatabase db = helper.getReadableDatabase();
		
		// 执行查询: 不去重复, 表是person, 查询name和balance两列, Where条件是"id=?", 占位符是id, 不分组, 没有having, 不排序, 没有分页
		Cursor c = db.query(false, "person", new String[]{"name", "balance"}, "id=?", new String[]{String.valueOf(id)}, null, null, null, null); 
		
		Person p = null;
		// 判断Cursor是否有下一条记录
		if (c.moveToNext())
			// 从Cursor中获取数据, 创建Person对象
			p = new Person(id, c.getString(0), c.getInt(1));
		
		// 释放资源
		c.close();
		db.close();
		return p;
	}

	public List<Person> queryAll() {
		SQLiteDatabase db = helper.getReadableDatabase();

		// 查询所有记录, 倒序
		Cursor c = db.query(false, "person", new String[]{"id","name", "balance"}, null, null, null, null, "id DESC", null);
		
		List<Person> persons = new ArrayList<Person>();
		while (c.moveToNext())
			persons.add(new Person(c.getInt(0), c.getString(1), c.getInt(2)));
		c.close();
		db.close();
		return persons;
	}
	
	public List<Person> queryPage(int pageNum, int capacity) {		
		// 开始索引
		String start = String.valueOf((pageNum - 1) * capacity);
		// 查询的个数
		String length = String.valueOf(capacity);
		
		SQLiteDatabase db = helper.getReadableDatabase();
		
		// 翻页查询
		Cursor c = db.query(false, "person", new String[]{"id","name", "balance"}, null, null, null, null, null, start + "," + length);
		
		List<Person> persons = new ArrayList<Person>();
		while (c.moveToNext())
			persons.add(new Person(c.getInt(0), c.getString(1), c.getInt(2)));
		c.close();
		db.close();
		return persons;
	}
	
	public int queryCount() {
		SQLiteDatabase db = helper.getReadableDatabase();
		
		// 查询记录条数
		Cursor c = db.query(false, "person", new String[]{"COUNT(*)"}, null, null, null, null, null, null);
		
		c.moveToNext();
		int count =c.getInt(0); 
		c.close();
		db.close();
		return count;
	}

}
 
3
2
分享到:
评论
1 楼 许助云 2013-10-23  
很不错--发个demo 261530219@qq.com

相关推荐

    Android SQLite数据库操作Demo

    在这个"Android SQLite数据库操作Demo"中,我们将探讨如何在Android应用中创建、查询、更新和删除SQLite数据库的数据。 1. **数据库初始化** 在Android中,我们通常通过扩展SQLiteOpenHelper类来初始化SQLite...

    Android之Sqlite数据库操作实例

    本实例将深入探讨如何在Android中使用SQLite数据库进行基本的操作,包括创建数据库、创建表、插入数据、查询数据以及更新和删除数据。 首先,我们来了解SQLite在Android中的使用基础。Android系统会为每个应用程序...

    android sqlite数据库实例

    本实例主要探讨如何在Android应用中进行SQLite数据库的增、删、查、改(CRUD)操作。 首先,我们需要创建一个SQLite数据库。在Android中,我们通过继承`SQLiteOpenHelper`类来实现。`SQLiteOpenHelper`提供了创建、...

    android sqlite数据库 demo code

    在"android sqlite数据库 demo code"中,我们可以看到一个简单的Android应用示例,该示例演示了如何使用SQLite数据库进行数据的增删改查操作。下面将详细介绍这些关键知识点: 1. **SQLiteOpenHelper**: 这是...

    Android SQLite数据库相关实例.rar

    Android SQLite数据库相关实例源码,代码中的每一个intent都会带一个Bundle型的extras数据。需要对position和id进行一个很好的区分。position指的是点击的这个ViewItem在当前ListView中的位置,每一个和ViewItem绑定...

    AndroidSqlite数据库操作封装SQLiteUtils.zip

    一个简单的基于Android的Sqlite数据库的操作封装,它有如下的好处:便捷地创建表和增添表字段灵活的数据类型处理通过操作对象来insert或者update表记录支持多种查询方式,支持多表自定义的复杂查询,支持分页查询支持...

    android sqlite数据库 增加、删除、修改,查询系统功能实现

    以上就是Android中SQLite数据库的基本操作。在实际应用中,通常会封装成DAO(Data Access Object)类,提供更方便的操作接口。SQLiteDemo这个压缩包文件很可能包含了实现这些功能的完整示例代码,可以作为参考学习,...

    android数据库操作实例

    本实例主要探讨的是如何在Android系统中使用SQLite数据库进行操作。SQLite是Android内置的轻量级数据库,适用于移动设备,支持基本的SQL语法。 首先,让我们了解Android中的SQLite数据库基本概念。SQLite数据库通过...

    Android开发中的SQLite数据库的增删改查工具类

    在Android开发中,SQLite数据库是应用进行本地数据...综上所述,SQLiteManager和DBSOpenHelper是Android开发中实现SQLite数据库操作的核心工具,它们结合使用能有效管理和操作本地数据,满足各种应用的本地存储需求。

    Android数据库SQLite详解

    4. 在应用中,通过`getWritableDatabase()`或`getReadableDatabase()`获取数据库实例。 5. 使用`SQLiteDatabase`对象执行CRUD操作,如`execSQL()`执行任意SQL语句,`insert()`, `update()`, `delete()`, 和 `query()...

    android 操作sqlite数据库源码

    通过这个源码实例,开发者可以学习到如何在Android应用中有效地操作SQLite数据库,理解基本的数据操作流程以及如何处理数据库版本变更。这不仅对于初学者来说是宝贵的实践资源,对于经验丰富的开发者也有助于复习和...

    SQLite数据库操作demo

    这个"SQLite数据库操作demo"旨在提供一个基础的示例,帮助初学者了解如何在Android环境中进行SQLite数据库的创建、查询、更新和删除等基本操作。 首先,Android中的SQLite数据库操作通常涉及以下步骤: 1. **创建...

    android SQLite数据库基础使用例子

    `SQLiteOpenHelper`提供了创建、升级数据库和获取SQLite数据库实例的方法。你需要重写`onCreate()`方法来初始化数据库结构,以及`onUpgrade()`方法来处理数据库版本更新。 2. **数据库版本管理**: Android系统通过`...

    AndroidSQLite数据库操作程序

    在本AndroidSQLite数据库操作程序中,我们将探讨如何在Android应用中有效地利用SQLite。 首先,我们需要了解SQLite数据库的基本概念。SQLite数据库由一个或多个数据库文件组成,每个文件包含一个或多个表。在...

    Android 绿豆通讯录【SQLite数据库】

     Android 绿豆通讯录( SQLite数据库 + ListView数据展示控件 ) https://blog.csdn.net/weixin_44949135/article/details/106029404 采用 SQLite数据库 + ListView数据展示控件,可将用户添加的所有信息,分条...

    Android 操作SQLite数据库实例

    在这个“Android操作SQLite数据库实例”中,我们将深入探讨如何在Android应用中创建、查询、更新和删除SQLite数据库的数据。 首先,我们需要在Android项目中添加SQLiteOpenHelper的子类,这个类是用来帮助我们管理...

    android操作数据库Sqlite源代码

    以上是基于Android操作SQLite数据库的一些核心概念和源代码组织方式。实际开发中,还需要考虑数据同步、数据备份、数据加密等高级功能,以及性能优化,如批量插入、使用索引等。学习并理解这些知识点,将有助于你更...

    安卓 SQLite数据库操作实例

    SQLite数据库在Android中的应用主要包括创建数据库、创建表、插入数据、查询数据、更新数据和删除数据等基本操作。下面我们将详细讲解这些知识点。 1. **创建数据库**: 在Android中,通常通过`SQLiteOpenHelper`...

    android使用sqlite数据库实例(直接可运行)

    本实例"android使用sqlite数据库实例(直接可运行)"提供了如何在Android应用中集成SQLite数据库的具体操作,以实现类似淘宝应用的功能,包括商品展示、购物车管理和用户历史记录的保存。 首先,我们来看看如何在...

Global site tag (gtag.js) - Google Analytics