Android 内嵌了功能比其他手机操作系统强大的关系型数据库sqlite3,我们在大学时候学的SQL语句基本都可以使用,
我们自己创建的数据可以用adb shell来操作。具体路径是/data/data/package_name/databases。
下面给出一个小例子代码:(增删改查操作)
首先把测试环境搭好,,在配置文件中AndroidManifest.xml中引入下面的语句申请相应的功能模块
<!-- 引用测试库类 -->
<uses-library android:name="android.test.runner"/>
<instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.example.db" android:label="My First App"> </instrumentation>
package com.example.domain; public class Person { private Integer id; private String nameString; private String phone; public Person() { } public Person( String nameString, String phone) { this.nameString = nameString; this.phone = phone; } public Person(Integer id, String nameString, String phone) { this.id = id; this.nameString = nameString; this.phone = phone; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getNameString() { return nameString; } public void setNameString(String nameString) { this.nameString = nameString; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } @Override public String toString() { return "Person [id=" + id + ", nameString=" + nameString + ", phone=" + phone + "]"; } }
package com.example.service; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; public class DBOpenHelper extends SQLiteOpenHelper { public DBOpenHelper(Context context) { //采用系统默认的游标 最后一个不要为零 super(context, "itcast.db", null, 2); } //数据库第一个被创建的时候调用的 @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 phone varchar(12) null"); } }注意:两个函数的区别,调用域不同。
建立PersonService :
package com.example.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.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) values (?,?)", new Object[] { person.getNameString(), person.getPhone() }); } public void delete(Integer id) { SQLiteDatabase db = dbOpenHelper.getWritableDatabase(); // 采用占位符的思想屏蔽掉字符串的特出性。。保证安全性 db.execSQL("delete from person where personid=?", new Object[] { id }); } public void update(Person person) { SQLiteDatabase db = dbOpenHelper.getWritableDatabase(); // 采用占位符的思想屏蔽掉字符串的特出性。。保证安全性 db.execSQL("update person set name=?,phone=? where personid=?", new Object[] { person.getNameString(), person.getPhone(), person.getId() }); } public Person find(Integer id) { // 区别:不满,,就一样,,如果存储空间满了,只能读不能写 SQLiteDatabase db = dbOpenHelper.getReadableDatabase(); // Cursor可以动态的查询结果,随机访问 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")); return new Person(personid, name, phone); } cursor.close(); return null; } // 数据分页 /*@param offset 跳过前面多少页 * @param maxResult 每页获取到多少条记录 * * */ public List<Person> getScrollDate(int offset, int maxResult) { List<Person> persons = new ArrayList<Person>(); SQLiteDatabase db = dbOpenHelper.getReadableDatabase(); // Cursor可以动态的查询结果,随机访问 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")); persons.add(new Person(personid, name, phone)); } cursor.close(); return persons; } //获取总记录 public long getCount() { SQLiteDatabase db = dbOpenHelper.getReadableDatabase(); // Cursor可以动态的查询结果,随机访问 Cursor cursor = db.rawQuery("select count(*) from person ", null); cursor.moveToFirst(); long result = cursor.getLong(0); return result; } }
下面建立测试类进行测试:
package com.example.test; import java.util.List; import com.example.domain.Person; import com.example.service.DBOpenHelper; import com.example.service.PersonService; import android.os.DropBoxManager; import android.test.AndroidTestCase; import android.util.Log; public class PersonServiceTest extends AndroidTestCase { private static final String TAG="PersonServiceTest"; public void testCreateDB() throws Exception{ //传入上下文对象 DBOpenHelper dbOpenHelper=new DBOpenHelper(getContext()); //此方法自动创建数据库 dbOpenHelper.getWritableDatabase(); } public void testSave()throws Exception{ PersonService service =new PersonService(this.getContext()); for(int i=0;i<20;i++){ Person person=new Person("zhangxx"+i,"18363857200"+i); service.save(person); } } public void testDelete()throws Exception{ PersonService service =new PersonService(this.getContext()); service.delete(21); } public void testUpdate()throws Exception{ PersonService service =new PersonService(this.getContext()); Person person=service.find(1); person.setNameString("zhaoxiaoxiao"); service.update(person); } public void testFind()throws Exception{ PersonService service =new PersonService(this.getContext()); Person person=service.find(1); Log.i(TAG, person.toString()); } public void testScrollData()throws Exception{ PersonService service =new PersonService(this.getContext()); List<Person> persons=service.getScrollDate(0, 5); for(Person p:persons){ Log.i(TAG, p.toString()); } } public void testCount()throws Exception { PersonService service =new PersonService(this.getContext()); long result=service.getCount(); //技巧,,返回的是字符串 Log.i(TAG, result+""); } }