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

安卓系统中有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<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;
	}
	
}








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值