对sqlite的使用做一下简单的汇总。

本文详细介绍了一个基于SQLite数据库的应用实例,包括数据库的创建、升级、基本的CRUD操作、查询优化及事务处理等内容。

 

  1. /**  
  2.  * @FILE:DBOpenHelper.java  
  3.  * @AUTHOR:Administrator  
  4.  * @DATE:2013-5-14 下午10:06:29  
  5.  **/  
  6. package com.yehui.service;  
  7.   
  8. import android.content.Context;  
  9. import android.database.sqlite.SQLiteDatabase;  
  10. import android.database.sqlite.SQLiteDatabase.CursorFactory;  
  11. import android.database.sqlite.SQLiteOpenHelper;  
  12.   
  13. /*******************************************  
  14.  *   
  15.  * @CLASS:DBOpenHelper  
  16.  * @DESCRIPTION:sqlite数据库必须继承SQLiteOpenHelper(抽象类)  
  17.  * @AUTHOR:Administrator  
  18.  * @VERSION:v1.0  
  19.  * @DATE:2013-5-14 下午10:06:29  
  20.  *******************************************/  
  21. public class DBOpenHelper extends SQLiteOpenHelper {  
  22.   
  23.     /**  
  24.      * create a instance DBOpenHelper.  
  25.      *   
  26.      * @param context  
  27.      *            上下文对象  
  28.      * @param name  
  29.      *            数据库名称  
  30.      * @param factory  
  31.      *            CursorFactory  
  32.      * @param version  
  33.      *            版本号(第一次生成数据库时,版本号是1,只执行一次)  
  34.      */  
  35.     public DBOpenHelper(Context context) {  
  36.         super(context, "yehui.db", null, 1);  
  37.   
  38.     }  
  39.   
  40.     /*  
  41.      * (non-Javadoc)当创建数据库的时候就会创建下面的表,可以在这里创建多张表:表中的字段的类型可以完全没有,  
  42.      * varchar(20)长度并不能限制。可以输入超过20字符的长度。  
  43.      *   
  44.      * @see  
  45.      * android.database.sqlite.SQLiteOpenHelper#onCreate(android.database.sqlite  
  46.      * .SQLiteDatabase)  
  47.      */  
  48.     @Override  
  49.     public void onCreate(SQLiteDatabase db) {  
  50.         String sql = "create table person(personid integer primary key autoincrement, name varchar(20))";  
  51.         // 执行这句sql  
  52.         db.execSQL(sql);  
  53.     }  
  54.   
  55.     /*  
  56.      * (non-Javadoc)对数据库更新,可以在这个方法里面对数据表做alter.:也就是说当 super(context, "yehui.db",  
  57.      * null, 1);这里面的版本号发生改变的时候就会调用这个方法,执行完成后将数据库的版本号设置为新的版本号  
  58.      *   
  59.      * @see  
  60.      * android.database.sqlite.SQLiteOpenHelper#onUpgrade(android.database.sqlite  
  61.      * .SQLiteDatabase, int, int)  
  62.      */  
  63.     @Override  
  64.     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  
  65.         String sql = "ALTER TABLE PERSON ADD PHONE VARCHAR(12) NULL";  
  66.         db.execSQL(sql);  
  67.     }  
  68.   
  69. }  
/**
 * @FILE:DBOpenHelper.java
 * @AUTHOR:Administrator
 * @DATE:2013-5-14 下午10:06:29
 **/
package com.yehui.service;

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

/*******************************************
 * 
 * @CLASS:DBOpenHelper
 * @DESCRIPTION:sqlite数据库必须继承SQLiteOpenHelper(抽象类)
 * @AUTHOR:Administrator
 * @VERSION:v1.0
 * @DATE:2013-5-14 下午10:06:29
 *******************************************/
public class DBOpenHelper extends SQLiteOpenHelper {

	/**
	 * create a instance DBOpenHelper.
	 * 
	 * @param context
	 *            上下文对象
	 * @param name
	 *            数据库名称
	 * @param factory
	 *            CursorFactory
	 * @param version
	 *            版本号(第一次生成数据库时,版本号是1,只执行一次)
	 */
	public DBOpenHelper(Context context) {
		super(context, "yehui.db", null, 1);

	}

	/*
	 * (non-Javadoc)当创建数据库的时候就会创建下面的表,可以在这里创建多张表:表中的字段的类型可以完全没有,
	 * varchar(20)长度并不能限制。可以输入超过20字符的长度。
	 * 
	 * @see
	 * android.database.sqlite.SQLiteOpenHelper#onCreate(android.database.sqlite
	 * .SQLiteDatabase)
	 */
	@Override
	public void onCreate(SQLiteDatabase db) {
		String sql = "create table person(personid integer primary key autoincrement, name varchar(20))";
		// 执行这句sql
		db.execSQL(sql);
	}

	/*
	 * (non-Javadoc)对数据库更新,可以在这个方法里面对数据表做alter.:也就是说当 super(context, "yehui.db",
	 * null, 1);这里面的版本号发生改变的时候就会调用这个方法,执行完成后将数据库的版本号设置为新的版本号
	 * 
	 * @see
	 * android.database.sqlite.SQLiteOpenHelper#onUpgrade(android.database.sqlite
	 * .SQLiteDatabase, int, int)
	 */
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		String sql = "ALTER TABLE PERSON ADD PHONE VARCHAR(12) NULL";
		db.execSQL(sql);
	}

}
其次,为了方法建立一个bean来对应表中的内容:

  1. /**  
  2.  * @FILE:Person.java  
  3.  * @AUTHOR:Administrator  
  4.  * @DATE:2013-5-14 下午10:31:18  
  5.  **/  
  6. package com.yehui.entity;  
  7.   
  8. /*******************************************  
  9.  *   
  10.  * @CLASS:Person  
  11.  * @DESCRIPTION:bean  
  12.  * @AUTHOR:Administrator  
  13.  * @VERSION:v1.0  
  14.  * @DATE:2013-5-14 下午10:31:18  
  15.  *******************************************/  
  16. public class Person {  
  17.     private Integer id;  
  18.     private String name;  
  19.     private String phone;  
  20.   
  21.     public Person(String name, String phone) {  
  22.         this.name = name;  
  23.         this.phone = phone;  
  24.     }  
  25.   
  26.     public Person(Integer id, String name, String phone) {  
  27.         super();  
  28.         this.id = id;  
  29.         this.name = name;  
  30.         this.phone = phone;  
  31.     }  
  32.   
  33.     public Person() {  
  34.         super();  
  35.     }  
  36.   
  37.     @Override  
  38.     public String toString() {  
  39.         return "Person [id=" + id + "name=" + name + "phone=" + phone + "]";  
  40.     }  
  41.   
  42.     public Integer getId() {  
  43.         return id;  
  44.     }  
  45.   
  46.     public void setId(Integer id) {  
  47.         this.id = id;  
  48.     }  
  49.   
  50.     public String getName() {  
  51.         return name;  
  52.     }  
  53.   
  54.     public void setName(String name) {  
  55.         this.name = name;  
  56.     }  
  57.   
  58.     public String getPhone() {  
  59.         return phone;  
  60.     }  
  61.   
  62.     public void setPhone(String phone) {  
  63.         this.phone = phone;  
  64.     }  
  65.   
  66.     public static void main(String[] args) {  
  67.         Person person = new Person("yehui", "132");  
  68.         System.out.println(person.toString());  
  69.     }  
  70. }  
/**
 * @FILE:Person.java
 * @AUTHOR:Administrator
 * @DATE:2013-5-14 下午10:31:18
 **/
package com.yehui.entity;

/*******************************************
 * 
 * @CLASS:Person
 * @DESCRIPTION:bean
 * @AUTHOR:Administrator
 * @VERSION:v1.0
 * @DATE:2013-5-14 下午10:31:18
 *******************************************/
public class Person {
	private Integer id;
	private String name;
	private String phone;

	public Person(String name, String phone) {
		this.name = name;
		this.phone = phone;
	}

	public Person(Integer id, String name, String phone) {
		super();
		this.id = id;
		this.name = name;
		this.phone = phone;
	}

	public Person() {
		super();
	}

	@Override
	public String toString() {
		return "Person [id=" + id + ", name=" + name + ", phone=" + phone + "]";
	}

	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 String getPhone() {
		return phone;
	}

	public void setPhone(String phone) {
		this.phone = phone;
	}

	public static void main(String[] args) {
		Person person = new Person("yehui", "132");
		System.out.println(person.toString());
	}
}
再次:建立一个service类来处理业务逻辑(注意两种不同的操作方法使用sql的不同)

  1. /**  
  2.  * @FILE:PersonService.java  
  3.  * @AUTHOR:Administrator  
  4.  * @DATE:2013-5-14 下午10:41:47  
  5.  **/  
  6. package com.yehui.service;  
  7.   
  8. import java.util.ArrayList;  
  9. import java.util.List;  
  10.   
  11. import android.content.ContentValues;  
  12. import android.content.Context;  
  13. import android.database.Cursor;  
  14. import android.database.sqlite.SQLiteDatabase;  
  15. import android.util.Log;  
  16.   
  17. import com.yehui.entity.Person;  
  18.   
  19. /*******************************************  
  20.  *   
  21.  * @CLASS:PersonService  
  22.  * @DESCRIPTION:对person进行增删改查操作  
  23.  * @AUTHOR:Administrator  
  24.  * @VERSION:v1.0  
  25.  * @DATE:2013-5-14 下午10:41:47  
  26.  *******************************************/  
  27. public class PersonService {  
  28.     private DBOpenHelper dbOpenHelper;  
  29.     public final static String TAG = "PersonService";  
  30.   
  31.     /**  
  32.      * create a instance PersonService. 会创建数据库  
  33.      *   
  34.      * @param context  
  35.      */  
  36.     public PersonService(Context context) {  
  37.         super();  
  38.         this.dbOpenHelper = new DBOpenHelper(context);  
  39.     }  
  40.   
  41.     /**  
  42.      * @description:保存  
  43.      * @author:Administrator  
  44.      * @return:void  
  45.      * @param person  
  46.      */  
  47.   
  48.     public void save(Person person) {  
  49.         // 如果数据表不存在先创建数据表,存在,则不创建  
  50.         SQLiteDatabase db = dbOpenHelper.getWritableDatabase();  
  51.         // SQLiteDatabase db1 = dbOpenHelper.getWritableDatabase();这个和  
  52.         // SQLiteDatabase db是同一个对象  
  53.         // 方法1  
  54.         // 使用?。参数形式  
  55.         // db.execSQL("insert into person(name,phone) values(?,?)", new Object[]  
  56.         // {  
  57.         // person.getName(), person.getPhone() });  
  58.         // 或者使用sqlite自带的操作方法  
  59.         // 方法2  
  60.         ContentValues values = new ContentValues();  
  61.         values.put("name", person.getName());  
  62.         values.put("phone", person.getPhone());  
  63.         db.insert("person", null, values);  
  64.         // 注意这里的第二个参数(表的字段名)。db.insert("person", "personid",  
  65.         // null);也就说新增一条纪录,id是null:这个语句不会报错,只会按自增的id新增一条纪录  
  66.     }  
  67.   
  68.     /**  
  69.      * @description:按照id删除数据  
  70.      * @author:Administrator  
  71.      * @return:void  
  72.      * @param id  
  73.      */  
  74.   
  75.     public void delete(Integer id) {  
  76.         // 如果数据表不存在先创建数据表,存在,则不创建  
  77.         SQLiteDatabase db = dbOpenHelper.getWritableDatabase();  
  78.         // 方法1  
  79.         // 使用?。参数形式  
  80.         // db.execSQL("delete from person where personid=?", new Object[] { id  
  81.         // });  
  82.         // 方法2  
  83.         db.delete("person", "personid=?", new String[] { id.toString() });  
  84.     }  
  85.   
  86.     public void update(Person person) {  
  87.         // 如果数据表不存在先创建数据表,存在,则不创建  
  88.         SQLiteDatabase db = dbOpenHelper.getWritableDatabase();  
  89.         // 方法1  
  90.         // 使用?。参数形式  
  91.         // db.execSQL("update  person set name=?,phone=? where personid=? ", new  
  92.         // Object[] { person.getName(),person.getPhone(),person.getPersonid()  
  93.         // });  
  94.         // 方法2  
  95.         ContentValues values = new ContentValues();  
  96.         values.put("name", person.getName());  
  97.         values.put("phone", person.getPhone());  
  98.         db.update("person", values, "personid=?", new String[] { person.getId()  
  99.                 .toString() });  
  100.     }  
  101.   
  102.     /**  
  103.      * @description:依照id查找数据  
  104.      * @author:Administrator  
  105.      * @return:Person  
  106.      * @param id  
  107.      * @return  
  108.      */  
  109.   
  110.     public Person find(Integer id) {  
  111.         Person person = null;  
  112.         // 如果数据表不存在先调用getReadableDatabase方法,存在,则不创建  
  113.         SQLiteDatabase db = dbOpenHelper.getReadableDatabase();  
  114.         // 方法1  
  115.         // 使用?。参数形式  
  116.         // Cursor cursor = db.rawQuery("select * from person where personid=?",  
  117.         // new String[] { id.toString() });  
  118.         // 方法2  
  119.         Cursor cursor = db.query("person", null, "personid=?",  
  120.                 new String[] { id.toString() }, null, null, null);  
  121.         // 如果找到一个result,则返回result  
  122.         if (cursor.moveToFirst()) {  
  123.             person = new Person();  
  124.             person.setId(cursor.getColumnIndex("personid"));  
  125.             person.setName(cursor.getString(cursor.getColumnIndex("name")));  
  126.             person.setPhone(cursor.getString(cursor.getColumnIndex("phone")));  
  127.         }  
  128.         Log.v(TAG, person.toString());  
  129.         cursor.close();  
  130.         return person;  
  131.     }  
  132.   
  133.     /**  
  134.      * @description:分页查询  
  135.      * @author:Administrator  
  136.      * @return:List<Person> 结果  
  137.      * @param offset  
  138.      *            跳过几条数据  
  139.      * @param maxResult  
  140.      *            总共查找几条数据  
  141.      * @return  
  142.      */  
  143.   
  144.     public List<Person> getScrollData(Integer offset, int maxResult) {  
  145.         List<Person> persons = new ArrayList<Person>();  
  146.         // 如果数据表不存在先调用getReadableDatabase方法,存在,则不创建  
  147.         SQLiteDatabase db = dbOpenHelper.getReadableDatabase();  
  148.         // 方法1  
  149.         // 使用?。参数形式  
  150.         // Cursor cursor = db.rawQuery(  
  151.         // "select * from person order by personid asc limit ?,?",  
  152.         // new String[] { String.valueOf(offset),  
  153.         // String.valueOf(maxResult) });  
  154.         // 方法2  
  155.         Cursor cursor = db.query("person", null, null, null, null, null,  
  156.                 "personid asc", offset + "," + maxResult);  
  157.         // 循环将结果加入到list中  
  158.         while (cursor.moveToNext()) {  
  159.             Person person = new Person();  
  160.             person.setId(cursor.getColumnIndex("personid"));  
  161.             person.setName(cursor.getString(cursor.getColumnIndex("name")));  
  162.             person.setPhone(cursor.getString(cursor.getColumnIndex("phone")));  
  163.             persons.add(person);  
  164.         }  
  165.         cursor.close();  
  166.         // Log.v(TAG, person.toString());  
  167.         return persons;  
  168.     }  
  169.   
  170.     /**  
  171.      * @description:获得纪录的总数  
  172.      * @author:Administrator  
  173.      * @return:long  
  174.      * @return  
  175.      */  
  176.   
  177.     public long getCount() {  
  178.         SQLiteDatabase db = dbOpenHelper.getReadableDatabase();  
  179.         // 方法1  
  180.         // Cursor cursor = db.rawQuery("select count(*) from person", null);  
  181.         // 方法2  
  182.         Cursor cursor = db.query("person", new String[] { "count('*')" }, null,  
  183.                 null, null, null, null, null);  
  184.         cursor.moveToFirst();  
  185.         // 取得第一个字段的所有记录数  
  186.         long count = cursor.getLong(0);  
  187.         cursor.close();  
  188.         Log.v(TAG, "纪录总数" + count);  
  189.         return count;  
  190.     }  
  191. }  
/**
 * @FILE:PersonService.java
 * @AUTHOR:Administrator
 * @DATE:2013-5-14 下午10:41:47
 **/
package com.yehui.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 android.util.Log;

import com.yehui.entity.Person;

/*******************************************
 * 
 * @CLASS:PersonService
 * @DESCRIPTION:对person进行增删改查操作
 * @AUTHOR:Administrator
 * @VERSION:v1.0
 * @DATE:2013-5-14 下午10:41:47
 *******************************************/
public class PersonService {
	private DBOpenHelper dbOpenHelper;
	public final static String TAG = "PersonService";

	/**
	 * create a instance PersonService. 会创建数据库
	 * 
	 * @param context
	 */
	public PersonService(Context context) {
		super();
		this.dbOpenHelper = new DBOpenHelper(context);
	}

	/**
	 * @description:保存
	 * @author:Administrator
	 * @return:void
	 * @param person
	 */

	public void save(Person person) {
		// 如果数据表不存在先创建数据表,存在,则不创建
		SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
		// SQLiteDatabase db1 = dbOpenHelper.getWritableDatabase();这个和
		// SQLiteDatabase db是同一个对象
		// 方法1
		// 使用?。参数形式
		// db.execSQL("insert into person(name,phone) values(?,?)", new Object[]
		// {
		// person.getName(), person.getPhone() });
		// 或者使用sqlite自带的操作方法
		// 方法2
		ContentValues values = new ContentValues();
		values.put("name", person.getName());
		values.put("phone", person.getPhone());
		db.insert("person", null, values);
		// 注意这里的第二个参数(表的字段名)。db.insert("person", "personid",
		// null);也就说新增一条纪录,id是null:这个语句不会报错,只会按自增的id新增一条纪录
	}

	/**
	 * @description:按照id删除数据
	 * @author:Administrator
	 * @return:void
	 * @param id
	 */

	public void delete(Integer id) {
		// 如果数据表不存在先创建数据表,存在,则不创建
		SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
		// 方法1
		// 使用?。参数形式
		// db.execSQL("delete from person where personid=?", new Object[] { id
		// });
		// 方法2
		db.delete("person", "personid=?", new String[] { id.toString() });
	}

	public void update(Person person) {
		// 如果数据表不存在先创建数据表,存在,则不创建
		SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
		// 方法1
		// 使用?。参数形式
		// db.execSQL("update  person set name=?,phone=? where personid=? ", new
		// Object[] { person.getName(),person.getPhone(),person.getPersonid()
		// });
		// 方法2
		ContentValues values = new ContentValues();
		values.put("name", person.getName());
		values.put("phone", person.getPhone());
		db.update("person", values, "personid=?", new String[] { person.getId()
				.toString() });
	}

	/**
	 * @description:依照id查找数据
	 * @author:Administrator
	 * @return:Person
	 * @param id
	 * @return
	 */

	public Person find(Integer id) {
		Person person = null;
		// 如果数据表不存在先调用getReadableDatabase方法,存在,则不创建
		SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
		// 方法1
		// 使用?。参数形式
		// Cursor cursor = db.rawQuery("select * from person where personid=?",
		// new String[] { id.toString() });
		// 方法2
		Cursor cursor = db.query("person", null, "personid=?",
				new String[] { id.toString() }, null, null, null);
		// 如果找到一个result,则返回result
		if (cursor.moveToFirst()) {
			person = new Person();
			person.setId(cursor.getColumnIndex("personid"));
			person.setName(cursor.getString(cursor.getColumnIndex("name")));
			person.setPhone(cursor.getString(cursor.getColumnIndex("phone")));
		}
		Log.v(TAG, person.toString());
		cursor.close();
		return person;
	}

	/**
	 * @description:分页查询
	 * @author:Administrator
	 * @return:List<Person> 结果
	 * @param offset
	 *            跳过几条数据
	 * @param maxResult
	 *            总共查找几条数据
	 * @return
	 */

	public List<Person> getScrollData(Integer offset, int maxResult) {
		List<Person> persons = new ArrayList<Person>();
		// 如果数据表不存在先调用getReadableDatabase方法,存在,则不创建
		SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
		// 方法1
		// 使用?。参数形式
		// Cursor cursor = db.rawQuery(
		// "select * from person order by personid asc limit ?,?",
		// new String[] { String.valueOf(offset),
		// String.valueOf(maxResult) });
		// 方法2
		Cursor cursor = db.query("person", null, null, null, null, null,
				"personid asc", offset + "," + maxResult);
		// 循环将结果加入到list中
		while (cursor.moveToNext()) {
			Person person = new Person();
			person.setId(cursor.getColumnIndex("personid"));
			person.setName(cursor.getString(cursor.getColumnIndex("name")));
			person.setPhone(cursor.getString(cursor.getColumnIndex("phone")));
			persons.add(person);
		}
		cursor.close();
		// Log.v(TAG, person.toString());
		return persons;
	}

	/**
	 * @description:获得纪录的总数
	 * @author:Administrator
	 * @return:long
	 * @return
	 */

	public long getCount() {
		SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
		// 方法1
		// Cursor cursor = db.rawQuery("select count(*) from person", null);
		// 方法2
		Cursor cursor = db.query("person", new String[] { "count('*')" }, null,
				null, null, null, null, null);
		cursor.moveToFirst();
		// 取得第一个字段的所有记录数
		long count = cursor.getLong(0);
		cursor.close();
		Log.v(TAG, "纪录总数" + count);
		return count;
	}
}

最后使用单元测试来测试功能:

  1. /**  
  2.  * @FILE:DBTest.java  
  3.  * @AUTHOR:Administrator  
  4.  * @DATE:2013-5-14 下午11:52:06  
  5.  **/  
  6. package com.yehui.db;  
  7.   
  8. import java.util.List;  
  9.   
  10. import android.app.Activity;  
  11. import android.database.sqlite.SQLiteDatabase;  
  12. import android.os.Bundle;  
  13. import android.test.AndroidTestCase;  
  14. import android.view.Menu;  
  15.   
  16. import com.yehui.entity.Person;  
  17. import com.yehui.service.DBOpenHelper;  
  18. import com.yehui.service.PersonService;  
  19.   
  20. /*******************************************  
  21.  *   
  22.  * @CLASS:DBTest  
  23.  * @DESCRIPTION:sqlite单元测试必须继承AndroidTestCase  
  24.  * @AUTHOR:Administrator  
  25.  * @VERSION:v1.0  
  26.  * @DATE:2013-5-14 下午11:52:06  
  27.  *******************************************/  
  28. public class DBTest extends AndroidTestCase  {  
  29.     private DBOpenHelper dbOpenHelper;  
  30.     private SQLiteDatabase sqliteDatabase;  
  31.     public void createDB() {  
  32.         dbOpenHelper = new DBOpenHelper(this.getContext());  
  33.         // 创建数据表  
  34.         sqliteDatabase = dbOpenHelper.getWritableDatabase();  
  35.     }  
  36.   
  37.     public void save() {  
  38.         PersonService personService = new PersonService(  
  39.                 this.getContext());  
  40.         Person person = new Person("zhangxueyou", "123456");  
  41.         personService.save(person);  
  42.     }  
  43.   
  44.     public void delete() {  
  45.         PersonService personService = new PersonService(  
  46.                 this.getContext());  
  47.         personService.delete(2);  
  48.     }  
  49.   
  50.     public void update() {  
  51.         PersonService personService = new PersonService(  
  52.                 this.getContext());  
  53.         Person person = personService.find(1);  
  54.         person.setName("guofucheng");  
  55.         personService.update(person);  
  56.     }  
  57.   
  58.     public Person find() {  
  59.         PersonService personService = new PersonService(  
  60.                 this.getContext());  
  61.         Person person = personService.find(1);  
  62.         return person;  
  63.     }  
  64.   
  65.     public List<Person> getScrollData() {  
  66.         PersonService personService = new PersonService(  
  67.                 this.getContext());  
  68.         List<Person> persons = personService.getScrollData(0, 2);  
  69.         return persons;  
  70.     }  
  71.   
  72.     public long getCount() {  
  73.         PersonService personService = new PersonService(  
  74.                 this.getContext());  
  75.         long count = personService.getCount();  
  76.         return count;  
  77.     }  
  78. }  
/**
 * @FILE:DBTest.java
 * @AUTHOR:Administrator
 * @DATE:2013-5-14 下午11:52:06
 **/
package com.yehui.db;

import java.util.List;

import android.app.Activity;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.test.AndroidTestCase;
import android.view.Menu;

import com.yehui.entity.Person;
import com.yehui.service.DBOpenHelper;
import com.yehui.service.PersonService;

/*******************************************
 * 
 * @CLASS:DBTest
 * @DESCRIPTION:sqlite单元测试必须继承AndroidTestCase
 * @AUTHOR:Administrator
 * @VERSION:v1.0
 * @DATE:2013-5-14 下午11:52:06
 *******************************************/
public class DBTest extends AndroidTestCase  {
	private DBOpenHelper dbOpenHelper;
	private SQLiteDatabase sqliteDatabase;
	public void createDB() {
		dbOpenHelper = new DBOpenHelper(this.getContext());
		// 创建数据表
		sqliteDatabase = dbOpenHelper.getWritableDatabase();
	}

	public void save() {
		PersonService personService = new PersonService(
				this.getContext());
		Person person = new Person("zhangxueyou", "123456");
		personService.save(person);
	}

	public void delete() {
		PersonService personService = new PersonService(
				this.getContext());
		personService.delete(2);
	}

	public void update() {
		PersonService personService = new PersonService(
				this.getContext());
		Person person = personService.find(1);
		person.setName("guofucheng");
		personService.update(person);
	}

	public Person find() {
		PersonService personService = new PersonService(
				this.getContext());
		Person person = personService.find(1);
		return person;
	}

	public List<Person> getScrollData() {
		PersonService personService = new PersonService(
				this.getContext());
		List<Person> persons = personService.getScrollData(0, 2);
		return persons;
	}

	public long getCount() {
		PersonService personService = new PersonService(
				this.getContext());
		long count = personService.getCount();
		return count;
	}
}

好了,总结就这么多了。

补充一点,sqlite事物处理:

SqliteDatabase db=dbOpenHelper.getReadableDatabase();

//开始事物

db.beginTransaction();

try{

  sql语句;

  sql语句;

//提交事物

db.setTransactionSuccessful();

}catch(Exception e){

}finally{

//结束事物

db.endTransaction();

}

下面添加复杂查询的方法,简单的将两个表进行关联:等价于(inner join)

先声明一个SQLiteQueryBuilder对象。

SQLiteQueryBuilder queryBuilder=new SQLiteQueryBuilder();

//设置需要关联的表

queryBuilder.setTables("tb1,tb2");

//添加表关联的条件:

queryBuilder.appendWhere(ta1.id=tb2.id);

//需要出现的列元素

String asColumnsToReturn[]={t1.title,t1.name,t2.age,address};

//排序条件

String strSortOrder="title ASC";

Cursor c=queryBuilder.query(db,asColumnsToReturn,null,null,null,null,strSortOrder);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值