安卓系统中有SQLite数据库,通常我们的通讯录,短信等等信息都是保存在这里的,这样,我们自己写的应用也是可以创建数据库,然后用sql语言保存在数据库里。
要在安卓里使用数据库,首要要分为以下几个步骤:
1.写一个数据库类继承SQLiteOpenHelper类,重写里面的onCreat()方法,在这个方法里写数据库的创建语言,数据库被第一次调用时,用调用这个方法创建数据库,嗨哟袷onupGrade()方法,这个方法是软件数据库版本变更时调用,最好放在一个单独的Utils包里。
2.写一个对数据库进行操作的dao类,在成员变量声明中一个第一步数据库类的实例,然后写select(),delete()等方法,具体方法实现就是通过数据库类的getWriteAbleDatebase(),获得一个可写数据库对象db,类型为SQLiteDateBase,写对应的sql语句,然后db调用executeSql(Sql)方法,对数据库进行操作,注意的事,如果是查询操作,要用rawQuery()方法,这个方法返回一个游标结果集,cursor里有getInt(int arg)等方法得到具体列值,arg就是数据库的属性列,从0开始。注意的是,这里可以像javaweb一个,sql语句中可以有缺省值”?“。
3.通过上面两步,就可以在activity的java文件逻辑中进行调用dao层的方法,对数据库进行操作。
除了原生的Sql语句之外,Android还提供了自身的api,获得了可写的SQLiteDatebase对象db后,直接调用db的insert(),delete(),等方法,更为简单,注意要注意其中的参数值就好,传值都是封装在一个ContentValues中,就是一个类似map对象,调用put()方法就好。
安卓数据库同样支持事务,就是三条语句:1.db.beginTransaction();2.db.setTransactionSuccessful();3.db.endTransaction(),在执行到endtransAction()时如果前面没有执行到successful方法,这个事务就不会成功执行。
自己写的数据库类:
package com.test.database.db;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
public class PersonSQLiteOpenHeper extends SQLiteOpenHelper {
public PersonSQLiteOpenHeper(Context context) {
super(context, "person",null, 1);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method s
String sql = "create table person ( id int primary key, name varchar(20), age int);";
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
// TODO Auto-generated method stub
}
}
dao类
package com.test.database.dao;
import java.util.ArrayList;
import java.util.List;
import com.test.database.db.PersonSQLiteOpenHeper;
import com.test.database.model.Person;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
public class PersonDao {
private PersonSQLiteOpenHeper personSQL ;
public PersonDao (Context context) {
personSQL = new PersonSQLiteOpenHeper(context);
}
public boolean update (Person person) {
SQLiteDatabase db = personSQL.getWritableDatabase();
db.beginTransaction();
if(db.isOpen()) {
ContentValues values = new ContentValues();
values.put("name", person.getName());
values.put("age", person.getAge());
db.update("person", values, "id = ?", new String[]{person.getId() + ""});
db.setTransactionSuccessful();
db.close();
db.endTransaction();
return true;
} else {
return false;
}
}
public boolean add(Person person) {
SQLiteDatabase db = personSQL.getWritableDatabase();
if(db.isOpen()) {
ContentValues values = new ContentValues();
values.put("name", person.getName());
values.put("age", person.getAge());
db.insert("person", null, values);
db.close();
return true;
}else {
return false;
}
}
public boolean delete(int id) {
SQLiteDatabase db = personSQL.getWritableDatabase();
if(db.isOpen()){
db.delete("person", "id = ?", new String[]{id + ""});
db.close();
return true;
}else {
return false;
}
}
public List getAll() {
SQLiteDatabase db = personSQL.getReadableDatabase();
List list = new ArrayList();
if(db.isOpen()) {
Cursor cursor = db.query("person", new String[]{"id","name","age"}, null,null, null, null, null);
if(cursor!=null){
int id;
String name;
int age;
Person person = new Person();
while(cursor.moveToNext()) {
id = cursor.getInt(0);
name = cursor.getString(1);
age = cursor.getInt(2);
person.setId(id);
person.setName(name);
person.setAge(age);
list.add(person);
}
db.close();
return list;
}
}
return null;
}
public Person getOne(int id ) {
SQLiteDatabase db = personSQL.getReadableDatabase();
Person person = new Person();
if(db.isOpen()) {
Cursor cursor = db.query("person",new String[]{"id","name","age"}, "id = ?", new String[]{id +""}, null, null, null);
if(cursor!=null&&cursor.moveToFirst()) {
person.setId(cursor.getInt(0));
person.setName(cursor.getString(1));
person.setAge(cursor.getInt(2));
}
db.close();
return person;
}
return null;
}
}