亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Android開發之用SQLite實現增上改查操作和事務

系統 1885 0

一)開發前準備工作,下載SQLite Expert工具(SQLite的可視化工具),大家可以去搜一下

? ? ? ?

二)工具準備好了,咱們開始開發吧

先貼一下項目的目錄結構:


Android開發之用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.大家可以下源代碼看一下,不是很會寫原理,呵呵,希望大家共同進步

? ?

?

Android開發之用SQLite實現增上改查操作和事務操作


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 精品午夜寂寞黄网站在线 | 热99精品 | 特级a毛片| 成人精品国产亚洲欧洲 | 咪咪爱在线观看 | 一级毛片欧美一级日韩黄 | 噜鲁射图片 | 久久免费精品一区二区 | 成人不卡视频 | 香港aa三级久久三级不卡 | 日韩在线免费视频 | 老妇毛片久久久久久久久 | 尤物视频一区 | 成人免费观看www视频 | 一级片短视频 | 一级欧美毛片成人免费视频 | 日韩精品免费一区二区三区 | 7777奇米| 九九影院最新理论片 | 国产欧美在线观看视频 | 四虎影视网站 | 曰批免费视频播放在线看片二 | 黄色片一级毛片 | 天天射天天操天天 | 亚洲 欧美 成人日韩 | 国产精品一国产精品 | 成人a毛片免费全部播放 | 国产精品视_精品国产免费 国产精品视频2021 | 免费看在线爱爱小视频 | 97视频 久久久 | 国产一级淫片a | 欧美日本俄罗斯一级毛片 | 国产一级做a爱片久久毛片a | 四虎影音在线 | 久久噜噜噜久久亚洲va久 | 国产成人精品日本 | 精品动漫一区二区三区 | 亚洲免费大片 | 九九久久国产精品大片 | 鲁啊鲁啊鲁在线视频播放 | 天天搞夜夜操 |