您的位置:首页 > 移动开发 > Android开发

Android 开发 SQLite数据库

2015-05-22 14:59 120 查看
新建project db

在src新建服务包service,包中新建类DBOpenHelper

并在superclass中继承android.database.sqlite.SQLiteOpenHelper(因为这个类是静态的,无法实例化)类

类中的两个方法,如果传入参数显示arg0,改为db     <SQLiteDatabase db>   <SQLiteDatabase db, int oldVersion, int newVersion>

因为父类没有构造区,需要自己添加(修正错误即可)

DBOpenHelper

package test.service;

import android.content.Context;
import android.database.DatabaseErrorHandler;
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) //新建数据库默认保存在 包/databases/
{
super(context, "me.db", null, 2);
//第二个参数name:数据库名称
//第三个参数factory:游标工厂,输入null表示使用系统默认
//第四个参数version:表示数据库文件的版本号,不能为0

}

@Override
public void onCreate(SQLiteDatabase db) //数据库每一次被创建时调用的方法
{
db.execSQL("CREATE TABLE person(personid integer primary key autoincrement, name varchar(20))");//输入SQL语句
//本SQL语句含义:创建表,名字为person,组件为personid, autoincrement表示组件是增长型,最后表示name字段

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)//数据库版本号发生变更时被调用
{
db.execSQL("ALTER TABLE person ADD phone VARCHAR(12) NULL");//输入SQL语句
//本SQL语句含义:在表person中添加phone字段,允许为空

}

}

新建一个domain包,新建一个Person类,用来保存数据

其中包括id,name,phone

生成写入和读取方法

package test.domain;

public class Person
{
private Integer id;
private String name;
private String 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;
}

}

在service包中新建一个PersonService类,用来对数据库进行增删改查

package test.service;

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

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

public class PersonService
{
private DBOpenHelper dbOpenHelper;

public PersonService(Context context)
{
super();
this.dbOpenHelper = new DBOpenHelper(context);//实例化操作对象
}
//增
public void save(Person person)
{
SQLiteDatabase db = dbOpenHelper.getWritableDatabase();//取得数据库操作实例
db.execSQL("insert into person(name, phone)values(?,?)",new Object[]{person.getName(), person.getPhone()});
//执行输入的SQL语句
//db.close();如果在应用中只在一处使用数据库,数据库可以不关闭,来提升性能
}
//删
public void delete(Integer id)
{
SQLiteDatabase db = dbOpenHelper.getWritableDatabase();//取得数据库操作实例
db.execSQL("delete from person where person id = ?",new Object[]{id});
}
//改
public void update(Person person)
{
SQLiteDatabase db = dbOpenHelper.getWritableDatabase();//取得数据库操作实例
db.execSQL("update person set name=?,phone=? where personid=?",new Object[]{person.getName(), person.getPhone(),person.getId()});
}
//查
public Person find(Integer id)
{
SQLiteDatabase db = dbOpenHelper.getReadableDatabase();//取得数据库操作实例
Cursor cursor = db.rawQuery("select * from person where personid=?", new String[]{id.toString()});
//得到了一个Cursor游标对象,对查询返回的结果集进行随机访问。可以通过cursor移动指针,对查询结果进行访问
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);//在Person类中增加无参数构造器
}
cursor.close();//关闭cursor结果集
return null;
}

//分页方法
//offset表示跳过前面多少条记录 maxResult表示获取多少条记录
public List<Person> getScrollData(int offset,int maxResult)
{
List<Person>persons = new ArrayList<Person>();
SQLiteDatabase db = dbOpenHelper.getReadableDatabase();//取得数据库操作实例
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 = db.rawQuery("select count(*) from person",null);
cursor.moveToFirst();
long result = cursor.getLong(0);
cursor.close();
return result;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: