`
yellowxiaotian
  • 浏览: 9243 次
  • 性别: Icon_minigender_1
  • 来自: 潍坊
社区版块
存档分类
最新评论

Android开发之用SQLite实现增上改查操作和事务操作

 
阅读更多

一)开发前准备工作,下载SQLite Expert工具(SQLite的可视化工具),大家可以去搜一下

       

二)工具准备好了,咱们开始开发吧

先贴一下项目的目录结构:



 

1.写一个获得创建修改数据库的工具类,这个类继承自SQLiteOpenHelper

 

package com.xiaobo.service;

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

public class DbOpenHelper extends SQLiteOpenHelper{

	public DbOpenHelper(Context context) {// 初始化时把数据库名和版本带上
		super(context, "itxiaobo.db", null, 3);
	}

	@Override
	public void onCreate(SQLiteDatabase db) {// 数据库第一次被创建的时候调用的
		db.execSQL("CREATE TABLE person (personid integer primary key autoincrement, name varchar(20))");
	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {// 数据库版本更改后执行这个方法
		db.execSQL("ALTER TABLE person ADD amount INTEGER NULL ");
	}

}

 

 

2.然后再下一个测试类PersonServiceTest,测试一下是否成功创建的数据库和表

   

package com.xiaobo.juit;

import java.util.List;

import android.test.AndroidTestCase;
import android.util.Log;

import com.xiaobo.domain.Person;
import com.xiaobo.service.DbOpenHelper;
import com.xiaobo.service.PersonService;

public class PersonServiceTest extends AndroidTestCase{
	// 本测试类的专有TAG标签,利于LogCat调试
	private final static String TAG = "PersonServiceTest";
	
	/**
	 * 测试创建或更改数据库
	 * @throws Throwable
	 */
	public void testCreateDb() throws Throwable{
		DbOpenHelper dbOpenHelper = new DbOpenHelper(getContext());
		dbOpenHelper.getWritableDatabase();
	}
}

 

   备注:写单元测试时得在AndroidManifest.xml配置一下,看下图

   

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.xiaobo.db"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="3"
        android:targetSdkVersion="17" />

    <instrumentation android:name="android.test.InstrumentationTestRunner" 
	    			 android:targetPackage="com.xiaobo.db" 
					 android:label="JUnit Test"/> 
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <!-- 单元测试的library -->
        <uses-library android:name="android.test.runner" /> 
        <activity
            android:name="com.xiaobo.db.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

 

3.写业务逻辑类PersonService,其中包含了增上改查,看代码吧

  

package com.xiaobo.service;

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

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

import com.xiaobo.domain.Person;

public class PersonService {
	private DbOpenHelper dbOpenHelper;
	
	public PersonService(Context context) {
		this.dbOpenHelper = new DbOpenHelper(context);
	}

	/**
	 * 添加记录
	 * @param person
	 */
	public void save(Person person){
		SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
		db.execSQL("insert into person(name, phone, amount) values(?,?)", new Object[]{person.getName(), person.getPhone(), person.getAmount()});
	}
	
	/**
	 * 根据id删除记录
	 * @param id
	 */
	public void delete(Integer id){
		SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
		db.execSQL("delete from person where personid=?", new Object[]{id});
	}
	
	/**
	 * 更新记录
	 * @param person
	 */
	public void update(Person person){
		SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
		db.execSQL("update person set name=?, phone=?, amount=? where personid=?", new Object[]{person.getName(), person.getPhone(),person.getAmount(), person.getId()});
	}
	
	/**
	 * 根据id查找一条记录
	 * @param id
	 * @return
	 */
	public Person find(Integer id){
		SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
		Cursor cursor = db.rawQuery("select * from person where personid=?", new String[]{id.toString()});
		if(cursor.moveToFirst()){
			int personid = cursor.getInt(cursor.getColumnIndex("personid"));
			String name = cursor.getString(cursor.getColumnIndex("name"));
			String phone = cursor.getString(cursor.getColumnIndex("phone"));
			int amount = cursor.getInt(cursor.getColumnIndex("amount"));
			return new Person(personid, name, phone, amount);
		}
		return null;
	}
	
	/**
	 * 查询翻页记录
	 * @param offset
	 * @param maxResult
	 * @return
	 */
	public List<Person> getScrollData(int offset, int maxResult){
		List<Person> persons = new ArrayList<Person>();
		SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
		Cursor cursor = db.rawQuery("select * from person order by personid asc limit ?,?", new String[]{String.valueOf(offset), String.valueOf(maxResult)});
		while(cursor.moveToNext()){
			int personid = cursor.getInt(cursor.getColumnIndex("personid"));
			String name = cursor.getString(cursor.getColumnIndex("name"));
			String phone = cursor.getString(cursor.getColumnIndex("phone"));
			int amount = cursor.getInt(cursor.getColumnIndex("amount"));
			persons.add(new Person(personid, name, phone, amount));
		}
		cursor.close();
		return persons;
	}
	
	/**
	 * 获取记录总数
	 * @return
	 */
	public long getCount(){
		SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
		Cursor cursor = db.rawQuery("select count(*) from person", null);
		cursor.moveToFirst();
		long count = cursor.getLong(0);
		return count;
	}
	
	/**
	 * 转账汇款事务
	 * @param fromId 汇款账户
	 * @param toId 接收账户
	 */
	public void payment(Integer fromId, Integer toId){
		SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
		db.beginTransaction();	// 开启事务
		try{
			db.execSQL("update person set amount=amount-500 where personid=?", new Object[]{fromId});
			db.execSQL("update person set amount=amount+500 where personid=?", new Object[]{toId});
			// 结束事务有两种情况,要么commit,要么rollback,是根据事务的标志决定的,默认为False,如果为True,就会提交
			db.setTransactionSuccessful();
		}finally{
			db.endTransaction();	// 结束事务
		}
	}
	
}

 

4.在先前创建的PersonServiceTest类里面写其他的测试方法,上代码

  

package com.xiaobo.juit;

import java.util.List;

import android.test.AndroidTestCase;
import android.util.Log;

import com.xiaobo.domain.Person;
import com.xiaobo.service.DbOpenHelper;
import com.xiaobo.service.PersonService;

public class PersonServiceTest extends AndroidTestCase{
	// 本测试类的专有TAG标签,利于LogCat调试
	private final static String TAG = "PersonServiceTest";
	
	/**
	 * 测试创建或更改数据库
	 * @throws Throwable
	 */
	public void testCreateDb() throws Throwable{
		DbOpenHelper dbOpenHelper = new DbOpenHelper(getContext());
		dbOpenHelper.getWritableDatabase();
	}
	
	/**
	 * 测试保存
	 * @throws Throwable
	 */
	public void testSave() throws Throwable{
		PersonService personService = new PersonService(getContext());
		personService.save(new Person(1, "yellow", "18706487378", 2000));
		personService.save(new Person(2, "yuan", "18706697820", 3000));
		personService.save(new Person(3, "zhen", "13658662813", 4000));
	}
	
	/**
	 * 测试根据id查找一条记录
	 * @throws Throwable
	 */
	public void testFind() throws Throwable{
		PersonService personService = new PersonService(getContext());
		Person person = personService.find(1);
		Log.i(TAG, person.toString());
	}
	
	/**
	 * 测试更新记录
	 * @throws Throwable
	 */
	public void testUpdate() throws Throwable{
		PersonService personService = new PersonService(getContext());
		personService.update(new Person(2, "yellow", "18706487378", 5000));
		personService.update(new Person(3, "yuan", "18706697820", 5000));
	}
	
	/**
	 * 测试删除记录
	 * @throws Throwable
	 */
	public void testDelete() throws Throwable{
		PersonService personService = new PersonService(getContext());
		personService.delete(1);
	}
	
	/**
	 * 测试获得记录总条数
	 * @throws Throwable
	 */
	public void testGetCount() throws Throwable{
		PersonService personService = new PersonService(getContext());
		Log.i(TAG, String.valueOf(personService.getCount()));
	}
	
	/**
	 * 测试分页记录
	 * @throws Throwable
	 */
	public void testGetScrollData() throws Throwable{
		PersonService personService = new PersonService(getContext());
		List<Person> persons = personService.getScrollData(0, 5);
		for(Person person :persons){
			Log.i(TAG, person.toString());
		}
	}
	
	/**
	 * 测试转账汇款
	 * @throws Throwable
	 */
	public void testUpdateAmount() throws Throwable{
		PersonService personService = new PersonService(getContext());
		Person p01 = personService.find(2);
		Person p02 = personService.find(3);
		System.out.println(p01.toString());
		System.out.println(p02.toString());
		p01.setAmount(500);
		p02.setAmount(600);
		personService.update(p01);
		personService.update(p02);
		Log.i(TAG, p01.getAmount().toString());
		Log.i(TAG, p02.getAmount().toString());
	}
	
	/**
	 * 测试转账汇款2
	 * @throws Throwable
	 */
	public void testPayment() throws Throwable{
		PersonService personService = new PersonService(getContext());
		Person p01 = personService.find(2);
		Person p02 = personService.find(3);
		// 打印转账之前账户信息
		Log.i(TAG, p01.toString());
		Log.i(TAG, p02.toString());
		personService.payment(2, 3);
		// 再次打印转账之后账户信息
		Log.i(TAG, p01.toString());
		Log.i(TAG, p02.toString());
	}
	
}

 

5.大家可以下源代码看一下,不是很会写原理,呵呵,希望大家共同进步

   

 

  • 大小: 21.1 KB
  • Db.zip (949.9 KB)
  • 下载次数: 1
分享到:
评论

相关推荐

    android利用sqlite实现增删改查

    在Android开发中,SQLite是一个非常重要的组件,它是一个轻量级的数据库系统,适用于移动...当然,实际应用中可能还需要考虑数据同步、数据加密、事务处理等更高级的特性,但以上内容已经涵盖了基本的增删改查操作。

    Android使用SQLite数据库进行增删改查详细案例

    本案例将详细介绍如何在Android应用中使用SQLite进行增(Create)、删(Delete)、改(Update)和查(Read)操作。 1. **创建SQLite数据库** 在Android中,我们需要创建一个继承自`SQLiteOpenHelper`的类,这个类...

    Android储存---SQLite数据库的简单使用,实现增删改查

    本教程将深入讲解如何在Android中使用SQLite数据库进行基本的增删改查操作。 首先,我们需要在Android项目中创建一个SQLite数据库。这通常通过继承`SQLiteOpenHelper`类来完成。`SQLiteOpenHelper`有两个关键的方法...

    Android连接sqlite数据库进行增删改查和事务操作

    本教程将详细介绍如何在Android中连接SQLite数据库,并执行基本的增删改查(CRUD)操作以及事务处理。 首先,我们需要创建一个SQLite数据库。在Android中,我们通常通过扩展`SQLiteOpenHelper`类来实现。这个类提供...

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

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

    Android SQLite 增删改查操作实例

    在Android开发中,SQLite是一个非常重要的组件,它是一个轻量级的数据库系统,适用于移动设备。SQLite被集成到Android系统中,允许开发者在应用程序中存储和管理数据。本实例将详细讲解如何在Android中进行SQLite...

    android SQLite增删改查及事务处理

    这篇内容将深入讲解如何在Android中使用SQLite进行数据的增删改查(CRUD)操作以及事务处理。 首先,我们来了解SQLite在Android中的基本使用。每个Android应用都有一个SQLiteOpenHelper的子类,这个类主要用于创建...

    Android SQLite 增、删、查、改操作源码

    本篇文章将详细探讨如何通过源码实现对SQLite数据库的增、删、查、改(CRUD)操作。 **创建SQLite数据库** 首先,我们需要创建一个SQLite数据库。在Android中,我们通常创建一个继承自`SQLiteOpenHelper`的类,如`...

    Android 操作数据库SQLite 增删改查demo

    在Android开发中,SQLite是一个非常重要的组件,它是一个轻量级的、嵌入式的数据库引擎,可以在设备上存储和管理数据。本示例主要讲解如何在Android应用中进行SQLite数据库的增删改查操作,这对于任何需要持久化数据...

    Android本地数据存储之SQLite增删改查

    本篇文章将深入探讨如何在Android中使用SQLite进行基本的增删改查操作,以实现高效的数据管理。 SQLite是一个开源的、关系型的数据库,它不需要单独的服务进程,可以直接嵌入到Android应用中,提供了事务处理、索引...

    android中用SQLite对学生表进行增删改查

    通过这个"android中用SQLite对学生表进行增删改查"的项目,你可以学习到如何在Android环境中有效地管理SQLite数据库,从而实现数据的持久化存储。对于初学者来说,这是一个非常实用且基础的学习材料,有助于理解和...

    无废话Android 系列教程34 [使用系统api实现SQLite增删改查&&测试]

    本教程将深入探讨如何使用系统API实现SQLite数据库的增删改查操作,并进行相关的测试。以下是对这个主题的详细讲解: 一、SQLite数据库基础 SQLite是Android系统内置的SQL数据库引擎,无需单独安装。开发者可以创建...

    android sqlite简单增删改查操作

    本文将深入探讨Android中SQLite数据库的简单增、删、改、查(CRUD)操作。 ### 一、SQLite简介 SQLite是一个开源的关系型数据库,它内置于Android系统中,无需额外安装任何库。它的优点在于体积小、速度快、可移植...

    androidSQLite增删改查及事务处理

    在这个"androidSQLite增删改查及事务处理"的demo中,我们将探讨如何进行基本的数据库操作以及事务处理。 **1. 创建SQLite数据库** 首先,我们需要创建一个SQLiteOpenHelper的子类,这个类帮助我们管理数据库的版本...

    Android开发用SQLite增删改查及自定义对话框

    在Android应用开发中,SQLite是一个重要的组成部分,它是一个轻量级的数据库系统,适用于存储应用...总之,掌握SQLite数据库和自定义对话框的使用是Android开发中的基础技能,能有效提高应用的用户体验和数据管理效率。

    Androidsqlite增删改查的基本使用

    本文将详细介绍如何在Android中进行SQLite的增删改查操作,以及事务处理和在异步线程中使用SQLite的一些注意事项。 **1. 增(Insert)** 在Android中,使用SQLiteOpenHelper的子类创建数据库并操作数据。首先,你...

    Android SQLite数据库的增删改查多种实现

    以上就是Android中使用SQLite数据库进行增删改查的基本操作,实际应用中可能需要根据需求进行更复杂的查询和事务处理。了解这些基础,可以帮助开发者高效地管理和操作Android应用中的数据。在`AndroidSqliteTest`...

    android 对sqlite数据库的增删改查

    以上就是Android中对SQLite数据库进行增删改查的基本操作和注意事项。通过这些方法,开发者能够灵活地管理应用程序的数据存储。在实际项目中,还可以结合ContentProvider和LiveData等组件,构建更复杂的数据库交互...

Global site tag (gtag.js) - Google Analytics