android中SQLite的使用总结,用excSQL和rawQuery方法实现一般得增删改查

原创 2011年07月19日 14:14:39

1:androidmanifest.xml的内容

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="cn.itcast.db"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
       <uses-library android:name="android.test.runner" />
        <activity android:name=".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>
    
    <uses-sdk android:minSdkVersion="8" />
    <!-- 配置测试环境 -->
    <instrumentation android:name="android.test.InstrumentationTestRunner" 
                     android:targetPackage="cn.itcast.db"
                     android:label="Test for My App"/>

</manifest> 

2:Person类

package cn.itcast.domain;

public class Person {
	
	private Integer id;
	private String name;
	
	public Person() {
		
	}

	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;
	}

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

3:DBOpenHelper类,该类继承了SQLiteOpenHelper类

package cn.itcast.service;

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

public class DBOpenHelper extends SQLiteOpenHelper {

	private static final String DATABASENAME = "cn.itcast.db";
	private static final int DATABASEVERSION = 1;
	
	/*
	 * 构造函数
	 */
	public DBOpenHelper(Context context) {
		super(context, DATABASENAME, null, DATABASEVERSION);
	}

	/*
	 * 数据库第一次生成时调用该方法,创建一些表或者初始化一些数据
	 * @see android.database.sqlite.SQLiteOpenHelper#onCreate(android.database.sqlite.SQLiteDatabase)
	 */
	@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) {

	}

}

4:PersonService类

package cn.itcast.service;

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

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import cn.itcast.domain.Person;

public class PersonService {
	
	private DBOpenHelper dbOpenHelper;
	
	public PersonService(Context context) {
		this.dbOpenHelper = new DBOpenHelper(context);
	}
	
	/*
	 * save a person to the database
	 */
	public void save(Person person) {
		SQLiteDatabase database = dbOpenHelper.getWritableDatabase();
		database.execSQL("insert into person(name) values (?)", new Object[]{person.getName()});
	}
	
	/*
	 * updata a person to the database
	 */
	public void update(Person person) {
		SQLiteDatabase database = dbOpenHelper.getWritableDatabase();
		database.execSQL("update person set name=? where personid=?", new Object[]{person.getName(), person.getId()});
	}
	
	/*
	 * delete a person from the database according to the id
	 */
	public void delete(Integer id) {
		SQLiteDatabase database = dbOpenHelper.getWritableDatabase();
		database.execSQL("delete from person where personid=?", new Object[]{id.toString()});
	}
	
	/*
	 * find a person from the database according to the id
	 */
	public Person find(Integer id) {
		SQLiteDatabase database = dbOpenHelper.getReadableDatabase();
		Cursor cursor = database.rawQuery("select * from person where personid=?", new String[]{id.toString()});
		Person person = null;
		if(cursor.moveToFirst()) {
		   	Integer personid = cursor.getInt(cursor.getColumnIndex("personid"));
		   	String name = cursor.getString(cursor.getColumnIndex("name"));
		   	person = new Person();
		   	person.setId(personid);
		   	person.setName(name);
		}
		return person;
	}
	
	/*
	 * get the data of person accroding to the offset and maxResult
	 */
	public List<Person> getScrollData(Integer offset, Integer maxResult) {
		SQLiteDatabase database = dbOpenHelper.getReadableDatabase();
		Cursor cursor = database.rawQuery("select * from person limit ?,?", new String[] {offset.toString(), maxResult.toString()});
		int idIndex = 0;
		int nameIndex = 0;
		List<Person> personList = null;
		
		if(cursor.getCount() >= 0) {
			 idIndex = cursor.getColumnIndex("personid");
			 nameIndex = cursor.getColumnIndex("name");
			 personList = new ArrayList<Person>();
		}
		
		while(cursor.moveToNext()) {
			Integer personid = cursor.getInt(idIndex);
			String name = cursor.getString(nameIndex);
			Person person = new Person();
			person.setId(personid);
			person.setName(name);
			personList.add(person);
		}
		return personList;
	}
	
    /*
     * get the count of the database
     */
	public long getCount(){
		SQLiteDatabase database = dbOpenHelper.getReadableDatabase();
		Cursor cursor = database.rawQuery("select count(*) from person", null);
		cursor.moveToFirst();
		return cursor.getLong(0);
	}
	
}

5:PersonServiceTest类

package cn.itcast.db;

import java.util.List;

import android.test.AndroidTestCase;
import android.util.Log;
import cn.itcast.domain.Person;
import cn.itcast.service.DBOpenHelper;
import cn.itcast.service.PersonService;

public class PersonServiceTest extends AndroidTestCase {
	private static final String TAG = "PersonServiceTest";
	
	/*
	 * 测试生成数据库的方法
	 */
	public void testCreateDB() throws Throwable {
		DBOpenHelper dbOpenHelper = new DBOpenHelper(this.getContext());
		dbOpenHelper.getWritableDatabase();  //第一次调用该方法会生成数据库
		
	}
	
	/*
	 * 测试保存方法
	 */
	public void testSave() throws Throwable{
		PersonService personService = new PersonService(this.getContext());
		
		Person person1 = new Person();
		person1.setName("zhangsan");
		personService.save(person1);
		
		Person person2 = new Person();
		person2.setName("lisi");
		personService.save(person2);
		
		Person person3 = new Person();
		person3.setName("wangwu");
		personService.save(person3);
		
	}
	
	public void testDelete() {
		PersonService personService = new PersonService(this.getContext());
		personService.delete(1);
		
	}
	
	/*
	 * 测试更新方法
	 */
	public void testUpdate() {
		PersonService personService = new PersonService(this.getContext());
		Person person = personService.find(1);
		person.setName("zhaoliu");
		personService.update(person);
		
	}
	
	/*
	 * 测试获得数据方法
	 */
	public void testGetScrollData() throws Throwable{
		PersonService personService = new PersonService(this.getContext());
		List<Person> persons = personService.getScrollData(0, 3);
		for(Person person : persons) {
			Log.i(TAG, person.toString());
		}
	}
	
	/*
	 * 测试根据id查找的方法
	 */
	public void testFind() throws Throwable{
		PersonService personService = new PersonService(this.getContext());
		Person person = personService.find(1);
		Log.i(TAG, person.toString());
		
	}
	
	/*
	 * 测试获得数量的方法
	 */
	public void testGetCount() {
		PersonService personService = new PersonService(this.getContext());
		long count = personService.getCount();
		Log.i(TAG, count + "");
	}
}



相关文章推荐

SQLiteDatabase query 和 rawQuery 的区别

Cursor cursor = db.rawQuery("select name from *** where id=?", new String[]{"1"}); Cursor cursor = ...

Android心得4.3--SQLite数据库--execSQL()和rawQuery()方法

本文转载自http://blog.csdn.net/yangkai_hudong/article/details/7880133,首先感谢原博主,本文对新手小白的我来说,写得蛮清楚,转载过来学习一下。...

Android心得4.3--SQLite数据库--execSQL()和rawQuery()方法

1.   除了可以使用文件或SharedPreferences存储数据,还可以选择使用SQLite数据库存储数据。 在Android平台上,集成了一个嵌入式关系型数据库—SQLite,SQLit...

SQLite使用rawQuery方法

对于Android平台上的数据库而言使用了嵌入式越来越流行的SQLite,为了更好的跨平台我们推荐大家使用原始SQL语句直接操作,在代码和处理效率上都有不小的提高,不过要做好SQL语句异常处理。 ...

Sqlite query & rawQuery

场景: 今天在写代码的时候被责令重构,凡是使用rawQuery的地方一律改为使用query,原因无他,可防SQL注入,并且由于query的参数一段段都是分开的,所以推荐使用Query。 比如我要查...

Android 中使用rawquery方法查询指定数据的一些方法总结

最近在安卓程序中用到了数据库的一些操作。在查到指定的条目的数据后,要取出这一条数据前一条和后一条的数据。 SQLite里用的一些查询语句基本跟MySQL里差不多,查询指定行需要的sql语句是selec...
  • lpf0907
  • lpf0907
  • 2015年09月14日 19:41
  • 2758

android rawquery和query的比较

Cursor cursor = db.rawQuery("select name from *** where id=?", new String[]{"1"}); Cursor cursor = ...

rawQuery的使用

File databaseFile = getDatabasePath(Contents.EnMicroMsg_sql_test); Log.d("wwwww", databaseFile....

建议SQLite操作使用rawQuery方法

对于Android平台上的数据库而言使用了嵌入式越来越流行的SQLite,为了更好的跨平台我们推荐大家使用原始SQL语句直接操作,在代码和处理效率上都有不小的提高,不过要做好SQL语句异常处理。 ...

rawQuery()与execSQL()方法区别

Android提供了一个名为SQLiteDatabase的类,该类封装了一些操作数据库的API,使用该类可以完成对数据进行添加(Create)、查询(Retrieve)、更新(Update)和删除(D...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android中SQLite的使用总结,用excSQL和rawQuery方法实现一般得增删改查
举报原因:
原因补充:

(最多只允许输入30个字)