作者:981378224_014f95 | 来源:互联网 | 2023-05-19 16:53
Android内嵌了功能比其他手机操作系统强大的关系型数据库sqlite3,我们在大学时候学的SQL语句基本都可以使用,我们自己创建的数据可以用adbshell来操作。具体路径是datadata
Android内嵌了功能比其他手机操作系统强大的关系型数据库sqlite3,我们在大学时候学的SQL语句基本都可以使用,
我们自己创建的数据可以用adb shell来操作。具体路径是/data/data/package_name/databases。
下面给出一个小例子代码:(增删改查操作)
首先把测试环境搭好,,在配置文件中AndroidManifest.xml中引入下面的语句申请相应的功能模块
建立一个Person类
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 getScrollDate(int offset, int maxResult) {
List persOns= new ArrayList();
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 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+"");
}
}
在测试类中 PersonService service =new PersonService(this.getContext());这句话不能被提取到方法之外生成共鸣,因为只有在初始化之后才会产生上下文对象。