Android 开发 SQLite数据库

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

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值