Android中的数据库SQLite

1.使用SQLiteOpenHelper抽象类建立数据库

  public DatabaseHelper(Context context,String name,CursorFactoty factory,int version){//应用的上下文,数据库名称,记录集游标工厂(对查询结果进行迭代),数据库版本。
    super(context,name,factory,version);
  }

  升级软件时,需要更改Version版本号就要调用onUpgrade()方法。

onUpgrade(SQLiteDatabase,int oldVersion,int newVersion);

  一般的应用中会把数据库名和版本号改为一个常量,只用给构造器传一个Context就可以了: 

  private static final String NAME="sharp.db";
    private static final int version=1;//版本号不能为0
    public DatabaseHelper(Context context){
      super(context,NAME,null,version);
    }

 在用户第一次使用软件时,会创建数据库,而oncreate()方法在数据库初次创建时被调用,他的参数是操作数据库的工具类,可以提供对数据库的添、删、改、查等方法。

  public void onCreate(SQLiteDatabase db){
    db.execSQL("CREATE TABLE person(personid integer primary key autoincrement,name varchar(20),age integer)");
  } 

 假如原来的版本号为1,且与现在的不一样,同时person表比版本1多加了一个字段address,那就要调用onUpgrade()方法,删除原有的表,再调用onCreate()方法重新建表。

  public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion){
    db.execSQL("DROP TABLE IF EXISTS person");
    onCreate(db);
  }

2.实现添、删、查、改的方法
  首先在一个新建类中实例化DatabaseHelper工具类,然后由外部调用OtherPersonService类传入上下文:

  private DatabaseHelper databaseHelper;
  private Context context;
  public OtherPersonService(Context context){
    this.context=context;
    databaseHelper =new DatabaseHelper(context);
  }

 添加:

  public void save(Person person){
    SQLiteDatabase database = databaseHelper.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put("name",person.getName());
    values.put("age",person.getAge());
    database.insert("person","name",values);//参数分别是表名,参数为null时,用来组拼成完整的SQL语句,添加的数据
    //database.close();
  }

 更新:

 public void update(Person person){
   SQliteDatabase  database = databeseHelper.getWritableDatabase();
   ContentValues values = new ContentValues();
   values.put("name",person.getName()); 
   values.put("age",person.getAge());
   database.updata("person",values,"personid=?",new String[]{String.valueOf(person.getId())});//参数分别是表名,更新的数据,SQL语句中条件部分的语句,占位符的值。
 }

 查找: 

 public Person find(Integer id){
   SQLiteDatabae database = databaseHelper.getWritableDatabase();
   Cursor cursor = database.query("person",new String[]{"personid","name","age"},"personid=?",new String[]{String.valueOf(id)},null,null,null);//参数分别为表名,查找需要返回的字段,SQL语句中的条件语句,占位符的值,表示分组(可设为null),SQL语句中的having(可设为null),表示结果的排序(可设为null)。
   	if(cursor.moveToNext()){
          Person person = new Person();
          person.setId(cursor.getInt(0));
	  person.setName(cursor.getString(1));
	  person.setAge(cursor.getInt(2));
	  return person;
        }
	return null;
}

 删除:

 public void delete(Integer id){
   SQLiteDatabase database = databaseHelper.getWritableDatabase();
   database.delete("person","personid=?",new String[]{String.valueOf(id)});
 } 

分页:

 public List<Person> getScrollData(int startResult,int maxResult){
   List<Person>persons = new ArrayList<Person>();
   SQLiteDatabase database = databaseHelper.getWritableDatabase();
   Cursor cursor = fatabase.query("person",new String[]{"personid","name","age"},null,null,null,null,"personid desc",startResult+","+maxResult);//参数分别是表名,查找需要返回的字段,SQL语句中的条件语句,占位符的值,分组(可为null),SQL语句中的having(可设为null),表示结果的排序(可设为null),组拼成完整的SQL语句。
   	while(cursor.movetoNext()){//迭代添加到persons
		Person person = new Person();
         	person.setId(cursor.getInt(0));
	  	person.setName(cursor.getString(1));
	 	person.setAge(cursor.getInt(2));
                persons.add(person);
	}
	return persons;
 }

 获取记录总数:

  public long getCount(){
    SQLiteDatabase database = databaseHelper.getWritableDatabase();
    Cursor cursor = database.query("person",new String[]{"count(*)"},null,null;null;null;null);
	if(cursor.moveToNext()){
	  return cursor.getLong(0);
	}
	return 0;
  }

 

                                                                    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值