Android中SQlite的使用

sqlite数据库 是一个开源项目,是一个轻量的关系型数据库。

如何使用它呢,创建它的代码如下。

首先创建一个DBOpenHelper的类,继承SQLiteOpenHelper。

public class MyDBOpenHelper extends SQLiteOpenHelper {

	/**
	 * 
	 * @param context 应用程序上下文
	 * @param name    数据库的名字
	 * @param factory 查询数据库的游标工厂 一般情况下 用sdk默认的
	 * @param version  数据库的版本 版本号必须不小1 
	 *  
	 */
	public DBOpenHelper(Context context) {
		super(context, "test.db", null, 5);
	}

	// 在dbOpenHelper 在数据库第一次被创建的时候  会执行onCreate();
	@Override
	public void onCreate(SQLiteDatabase db) {
		System.out.println("我被调用了 oncreate");
		db.execSQL("CREATE TABLE person (personid integer primary key autoincrement, name varchar(20))");
	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		System.out.println("on update ");
		db.execSQL("ALTER TABLE person ADD phone VARCHAR(12) NULL ");
	}
}

onCreate只会在数据库第一次创建的时候被执行。

onUpdate方法在数据可版本Version变化是被执行,用语跟新表。

这句代码就会在test.db中创建一张表TABLE.

		db.execSQL("CREATE TABLE person (personid integer primary key autoincrement, name varchar(20))");


在Activity中,使用getReadableDatabase就可得到一个可读的数据库了。
		DBHelper  db=new DBHelper(this);
		db.getReadableDatabase();



关于数据库的增删该查

public class PersonDAO {
	private DBHelper helper;

	public PersonDAO(Context context) {
		helper = new DBHelper(context);
	}

	/**
	 * 增加一条记录
	 * */
	public void add(String name) {
		SQLiteDatabase db = helper.getWritableDatabase();
		if (db.isOpen()) {
			/* db.execSQL("insert into person (name) values("+name+")");//写法一 */
			db.execSQL("insert into person (name) values (?)",
					new Object[] { name });// 写法二
			db.close();
		}
	}

	/**
	 * 查找一条记录
	 * */
	public boolean find(String name) {
		boolean result = false;
		SQLiteDatabase db = helper.getReadableDatabase();
		if (db.isOpen()) {
			Cursor cursor = db.rawQuery("select * from person where name=?",
					new String[] { name });
			if (cursor.moveToFirst()) {// 如果游标能够移动到第一位
				int index = cursor.getColumnIndex("personid");// 得到name在表中是第几列
				String id = cursor.getString(index);
				Log.i("TAG", name + "的ID是" + id);
				result = true;
				// 记得关闭掉cursor
				cursor.close();
			}
			result = false;
			db.close();
		}
		return result;

	}

	/***
	 * 删除一条记录
	 * 
	 * @param name
	 */
	public void delete(String name) {
		SQLiteDatabase db = helper.getWritableDatabase();
		if (db.isOpen()) {
			db.execSQL("delete from person where name=?", new Object[] { name });
			db.close();
		}
	}

	/**
	 * 跟新一条数据
	 * */
	public boolean update(String oldName, String newName) {
		SQLiteDatabase db = helper.getWritableDatabase();
		if (db.isOpen()) {
			db.execSQL("update person set name=? where name=?", new Object[] {
					newName, oldName });
			db.close();
			return true;
		}
		return false;
	}

}

在Activity中,只要
public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		PersonDAO personDAO=new PersonDAO(this);
		personDAO.add("张三");
		
		
	}


}


 

 

 

也可以使用自带的API来操作数据库,这样不用自己写sql语句。

public class PersonDBDao {
	private Context context;
	MyDBOpenHelper dbOpenHelper;

	public PersonDBDao(Context context) {
		this.context = context;
		dbOpenHelper = new MyDBOpenHelper(context);
	}

	/**
	 * 添加一条记录
	 */
	public void add(String name, int age) {
		SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
		if (db.isOpen()) {
			// db.execSQL("insert into person (name,age) values (?,?)",new
			// Object[]{name,age});
			// db.execSQL("insert into person ",null) // 不合法的sql语句
			ContentValues values = new ContentValues();
			values.put("name", name);
			values.put("age", age);
			// 如果 contentvalues为空
			db.insert("person", null, values); // 组拼sql语句完成的添加的操作
			
			//第二个参数null的意义:如果values为空则执行 insert into person name values (NULL) ;
			db.close();
		}

	}

	/**
	 * 删除一条记录
	 */
	public void delete(String name) {
		SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
		if (db.isOpen()) {
			db.delete("person", "name=?", new String[] { name });
			db.close();
		}
	}

	/**
	 * 数据库的更改操作
	 */
	public void update(String name, String newname, int newage) {
		SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
		if (db.isOpen()) {
			ContentValues values = new ContentValues();
			values.put("name", newname);
			values.put("age", newage);
			db.update("person", values, "name=?", new String[] { name });
			db.close();
		}
	}

	/**
	 * 数据库的查询操作
	 */
	public boolean find(String name) {
		boolean result = false;
		SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
		if (db.isOpen()) {
			// select * from person
			Cursor cursor = db.query("person", null, "name=?",
					new String[] { name }, null, null, null);
			if (cursor.moveToFirst()) {
				result = true;
			}
			cursor.close();
			db.close();
		}
		return result;

	}

	/**
	 * 查询所有信息
	 */
	public List<Person> findAll() {
		List<Person> persons = null;
		SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
		if (db.isOpen()) {
			Cursor cursor = db.query("person", null, null, null, null, null,
					null);
			persons = new ArrayList<Person>();
			while (cursor.moveToNext()) {
				Person person = new Person();
				String name = cursor.getString(cursor.getColumnIndex("name"));
				person.setName(name);
				int age = cursor.getInt(cursor.getColumnIndex("age"));
				person.setAge(age);
				persons.add(person);
			}
			cursor.close();
			db.close();
		}
		return persons;
	}
	/**
	 * 查询所有信息
	 */
	public Cursor findAllbyCursor() {
		SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
		if (db.isOpen()) {
			/*Cursor cursor = db.query("person", null, null, null, null, null,
					null);*/
			Cursor cursor = db.rawQuery("select personid as _id,age,name from person", null);
			
			return cursor;
			// 注意了  一定不要把数据库 关闭了 
			}
		return null;
		
	}}



 涉及到事务的操作,用一下例子来说明:

/**
	 * 银行转账的方法
	 */
	public void transaction() {
		SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
		if (db.isOpen()) {

			try {
				// 开启数据库的事务
				db.beginTransaction();
				// 给张三设置1000块钱的账户
				db.execSQL("update person set account=? where name=?",
						new Object[] { 1000, "zhangsan98" });
				// 把张三的账户扣除200块钱
				db.execSQL("update person set account=account-? where name=?",
						new Object[] { 200, "zhangsan98" });
				// 出现了异常
				// 把张三的钱给李四
				//初始化李四账户 为 0
				db.execSQL("update person set account=? where name=?",
						new Object[] { 0, "lisi" });
				db.execSQL("update person set account=account+? where name=?",
						new Object[] { 200, "lisi" });
				db.setTransactionSuccessful();
			}
			// 显示的设置事务是否成功
			catch (Exception e) {
				// TODO: handle exception
			} finally {
				db.endTransaction();
				db.close();
			}
		}
	}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值