Android中的数据库操作及内置SQLite使用和事务

来源:互联网 发布:网络机顶盒软件下载市场 编辑:程序博客网 时间:2024/05/21 11:14

安卓系统中有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}@Overridepublic void onCreate(SQLiteDatabase db) {// TODO Auto-generated method sString sql = "create table person ( id int primary key, name varchar(20), age int);";db.execSQL(sql);}@Overridepublic 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<Person> getAll() {SQLiteDatabase db = personSQL.getReadableDatabase();List<Person> list = new ArrayList<Person>();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;}}








0 0