***

12140 ワード

SQLiteの特徴:
1.ゼロ構成
2.移植可能
3.コンパクト
4.シンプル
5.信頼性
SQLiteが解析できるsql文:
クエリー/ソート/ページング/挿入/更新/削除
SQLiteOpenHelper抽象クラスを使用してデータベースを操作するには、次の手順に従います.
SQLiteOpenHelperは2つの重要な方法を提供しています.
onCreate(SQLiteDatabase db); onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion);
//SQLiteDatabaseインスタンスは読み書きで取得され、データベースが作成されていない場合はonCreate(SQLiteDatabase db)メソッドを呼び出してデータベースを作成します.
//バージョン番号が変わるとonUpgrade(SQLiteDatabase db,int oldVersion,int newVersion)がトリガーされます
getWritableDatabase();
//SQLiteDatabaseインスタンスは読取り専用で取得され、バージョン番号が変更されるとonUpgrade(SQLiteDatabase db,int oldVersion,int newVersion)がトリガーされます.
getReadableDatabase();
//バージョン番号は加算のみ
追加削除この検索には2つの実装方法があります
DatabaseHelper.javaコードは次のとおりです.
package com.example.service_basic.service;

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

public class DatabaseHelper extends SQLiteOpenHelper{
	
	private static final String TAG = DatabaseHelper.class.getSimpleName();
	
	private static final String NAME = "test.db";
	private static final int VERSION = 2;
	
	public DatabaseHelper(Context context) {
		super(context, NAME, null, VERSION);
		Log.i(TAG, "DatabaseHelper()..       ");
	}

	@Override
	public void onCreate(SQLiteDatabase db) {
		Log.i(TAG, "onCreate()..");
		db.execSQL("create table person (personid integer primary key autoincrement,name varchar(20),age integer)");
	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) {
		Log.i(TAG, "onUpgrade()..");
		
	}

}

Person.javaコードは次のとおりです.
package com.example.service_basic.domain;

public class Person {
	
	private Integer id;
	private String name;
	private Integer age;
	
	public Person() {
		super();
	}
	
	public Person(String name, Integer age) {
		super();
		this.name = name;
		this.age = age;
	}
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	
	@Override
	public String toString() {
		return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
	}
}

1つ目の方法:
package com.example.service_basic.service;

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

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

import com.example.service_basic.domain.Person;

public class PersonService {
	
	private DatabaseHelper databaseHelper;
	private Context context;
	
	public PersonService(Context context){
		this.context = context;
		databaseHelper = new DatabaseHelper(this.context);
	}
	
	public void save(Person person){
		SQLiteDatabase db = databaseHelper.getWritableDatabase();
		db.beginTransaction();
		db.execSQL("insert into person (name,age) values(?,?) ",new Object[]{person.getName(),person.getAge()});
		db.execSQL("insert into person (name,age) values(?,?) ",new Object[]{person.getName(),person.getAge()});
		db.setTransactionSuccessful();
		db.endTransaction();
	}
	
	public void update(Person person){
		SQLiteDatabase db = databaseHelper.getWritableDatabase();
		db.execSQL("update person set name = ?,age = ? where personid = ? ",new Object[]{person.getName(),person.getAge(),person.getId()});
	}
	
	public void delete(Integer id){
		SQLiteDatabase db = databaseHelper.getWritableDatabase();
		db.execSQL("delete from person where personid=? ",new Object[]{id});
	}
	
	public Person query(String name){
		SQLiteDatabase db = databaseHelper.getReadableDatabase();
		Cursor cursor = db.rawQuery("select * from person where name = ?", new String[]{name});
		if(cursor.moveToNext()){
			Person person = new Person();
			person.setId(cursor.getInt(cursor.getColumnIndex("personid")));
			person.setName(cursor.getString(cursor.getColumnIndex("name")));
			person.setAge(cursor.getInt(cursor.getColumnIndex("age")));
			cursor.close();
			return person;
		}
		cursor.close();
		return null;
	}
	
	public List<Person> getPageData(int firstResult,int maxResult){
		List<Person> persons = new ArrayList<Person>();
		SQLiteDatabase db = databaseHelper.getReadableDatabase();
		Cursor cursor = db.rawQuery("select personid,name,age from person limit ?,? ", 
				new String[]{
					String.valueOf(firstResult),
					String.valueOf(maxResult)
				});
		while(cursor.moveToNext()){
			Person person = new Person();
			person.setId(cursor.getInt(cursor.getColumnIndex("personid")));
			person.setName(cursor.getString(cursor.getColumnIndex("name")));
			person.setAge(cursor.getInt(cursor.getColumnIndex("age")));
			persons.add(person);
		}
		cursor.close();
		return persons;
	}
	
	public int getCountByPerson(){
		SQLiteDatabase db = databaseHelper.getReadableDatabase();
		Cursor cursor = db.rawQuery("select count(1) from person ", null);
		cursor.moveToFirst();
		int count = cursor.getInt(0);
		cursor.close();
		return count;
	}
}

第1の方法ユニットテストクラス:
package com.example.service_basic.test;

import java.util.List;

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

import com.example.service_basic.domain.Person;
import com.example.service_basic.service.PersonService;

public class TestPersonService extends AndroidTestCase{
	
	private static final String TAG = TestPersonService.class.getSimpleName();
	
	public void testSave(){
		PersonService service = new PersonService(getContext());
		for(int i=0;i<10;i++){
			Person person = new Person("Hello"+i,i);
			Log.i(TAG, "testSave()"+i+"..begin..");
			service.save(person);
			Log.i(TAG, "testSave()."+i+".end..");
		}
	}
	
	public void testUpdate(){
		PersonService service = new PersonService(getContext());
		Person person = new Person("Charles",32);
		person.setId(1);
		Log.i(TAG, "testUpdate()..begin..");
		service.update(person);
		Log.i(TAG, "testUpdate()..end..");
	}
	
	public void testDelete(){
		PersonService service = new PersonService(getContext());
		Log.i(TAG, "testDelete()..begin..");
		service.delete(1);
		Log.i(TAG, "testDelete()..end..");
	}
	
	public void testRawQuery(){
		PersonService service = new PersonService(getContext());
		Person person = service.query("carl");
		Log.i(TAG, "Person..RawQuery()..:"+person);
	}
	
	public void testGetPageData(){
		PersonService service = new PersonService(getContext());
		List<Person> persons = service.getPageData(0, 100);
		for(Person p:persons){
			Log.i(TAG, "person:"+p);
		}
	}
	
	public void testGetCountByPerson(){
		PersonService service = new PersonService(getContext());
		int count = service.getCountByPerson();
		Log.i(TAG, "person_count:"+count);
	}
}

2つ目の実装方法:
package com.example.service_basic.service;

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;

import com.example.service_basic.domain.Person;

public class OtherPersonService {
	private DatabaseHelper databaseHelper;
	private Context context;

	public OtherPersonService(Context context){
		this.context = context;
		databaseHelper = new DatabaseHelper(this.context);
	}
	
	public void save(Person person){
		SQLiteDatabase db = databaseHelper.getWritableDatabase();
		ContentValues values = new ContentValues();
		values.put("name", person.getName());
		values.put("age", person.getAge());
		db.insert("person", "name,age", values);
		db.close();
	}
	
	public void update(Person person){
		SQLiteDatabase db = databaseHelper.getWritableDatabase();
		ContentValues values = new ContentValues();
		values.put("name", person.getName());
		values.put("age", person.getAge());
		db.update("person", values, "personid = ? ", new String[]{String.valueOf(person.getId())});
		db.close();
	}
	
	public void delete(Integer id){
		SQLiteDatabase db = databaseHelper.getWritableDatabase();
		db.delete("person", "personid=?", new String[]{String.valueOf(id)});
		db.close();
	}
	
	public Person find(Integer id){
		SQLiteDatabase db = databaseHelper.getReadableDatabase();
		Cursor cursor = db.query("person", 
				new String[]{"personid","name","age"}, "personid = ? ", 
				new String[]{String.valueOf(id)}, null, null, null);
		if(cursor.moveToNext()){
			Person person = new Person();
			person.setId(cursor.getInt(0));
			person.setName(cursor.getString(1));
			person.setAge(cursor.getInt(2));
			db.close();
			return person;
		}
		db.close();
		return null;
	}
	
	public int getCount(){
		int count = 0;
		SQLiteDatabase db = databaseHelper.getReadableDatabase();
		Cursor cursor = db.query("person", new String[]{"count(*)"}, null, null, null, null, null);
		cursor.moveToFirst();
		count = cursor.getInt(0);
		db.close();
		return count;
	}
	
	public List<Person> getPageData(int startNo,int endNo){
		List<Person> list = new ArrayList<Person>();
		SQLiteDatabase db = databaseHelper.getReadableDatabase();
		Cursor cursor = db.query("person", new String[]{"personid","name","age"}, null, null, null, null, null, startNo+","+endNo);
		while(cursor.moveToNext()){
			Person person = new Person();
			person.setId(cursor.getInt(0));
			person.setName(cursor.getString(1));
			person.setAge(cursor.getInt(2));
			list.add(person);
		}
		db.close();
		return list;
	}
}

第2のインプリメンテーションユニットテストクラス:
package com.example.service_basic.test;

import java.util.List;

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

import com.example.service_basic.domain.Person;
import com.example.service_basic.service.OtherPersonService;

public class TestOtherPersonService extends AndroidTestCase{
	
	private static final String TAG = TestOtherPersonService.class.getSimpleName();
	
	public void testOtherSave(){
		OtherPersonService service = new OtherPersonService(getContext());
		Log.i(TAG, "testOtherSave()..begin..");
		Person person = new Person("Jerry_",18);
		service.save(person);
		Log.i(TAG, "testOtherSave()..end..");
	}
	
	public void testOtherUpdate(){
		OtherPersonService service = new OtherPersonService(getContext());
		Log.i(TAG, "testOtherUpdate()..begin..");
		Person person = new Person("Jerry_",18);
		person.setId(2);
		service.update(person);
		Log.i(TAG, "testOtherUpdate()..end..");
	}
	
	public void testOtherDelete(){
		OtherPersonService service = new OtherPersonService(getContext());
		Log.i(TAG, "testOtherDelete()..begin..");
		service.delete(2);
		Log.i(TAG, "testOtherDelete()..end..");
	}
	
	public void testOtherfind(){
		OtherPersonService service = new OtherPersonService(getContext());
		Log.i(TAG, "testOtherfind()..begin..");
		Person person = service.find(2);
		Log.i(TAG, "person:"+person);
		Log.i(TAG, "testOtherfind()..end..");
	}
	
	public void testOtherCount(){
		OtherPersonService service = new OtherPersonService(getContext());
		Log.i(TAG, "testOtherCount()..begin..");
		int count = service.getCount();
		Log.i(TAG, "count:"+count);
		Log.i(TAG, "testOtherCount()..end..");
	}
	
	public void testOtherGetPageData(){
		OtherPersonService service = new OtherPersonService(getContext());
		Log.i(TAG, "testOtherCount()..begin..");
		List<Person> persons = service.getPageData(5, 5);
		for(Person p:persons){
			Log.i(TAG, "person:"+p);
		}
		Log.i(TAG, "testOtherCount()..end..");
	}
}