android数据存储(二)

这一讲我们讲解使用sqlite数据库存储数据。
布局如下
在这里插入图片描述

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="testCreateDB"
        android:text="Create DB" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="testUpdateDB"
        android:text="Update DB" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="testInsert"
        android:text="Insert" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="testUpdate"
        android:text="Update" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="testDelete"
        android:text="Delete" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="testQuery"
        android:text="query" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="testTransaction"
        android:text="Test Transaction" />

</LinearLayout>

处理Activity类

package com.hbk.sqlite;

import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Toast;


public class MainActivity extends Activity {

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

	/*
	 * 创建库
	 */
	public void testCreateDB(View v) {
		DBHelper dbHelper = new DBHelper(this, 1);
		//获取连接
		SQLiteDatabase database = dbHelper.getReadableDatabase();
		
		Toast.makeText(this, "创建数据库", 0).show();
	}

	/*
	 * 更新库
	 */
	public void testUpdateDB(View v) {
		DBHelper dbHelper = new DBHelper(this, 2);
		//获取连接
		SQLiteDatabase database = dbHelper.getReadableDatabase();
		
		Toast.makeText(this, "更新数据库", 0).show();
	}

	/*
	 * 添加记录
	 */
	public void testInsert(View v) {
		//1. 得到连接
		DBHelper dbHelper = new DBHelper(this, 2);
		SQLiteDatabase database = dbHelper.getReadableDatabase();
		//2. 执行insert  insert into person(name, age) values('Tom', 12)
		ContentValues values = new ContentValues();
		values.put("name", "Tom");
		values.put("age", 12);
		long id = database.insert("person", null, values);
		//3. 关闭
		database.close();
		//4. 提示
		Toast.makeText(this, "id="+id, 1).show();
	}

	/*
	 * 更新
	 */
	public void testUpdate(View v) {
		DBHelper dbHelper = new DBHelper(this, 2);
		SQLiteDatabase database = dbHelper.getReadableDatabase();
		//执行update  update person set name=Jack, age=13 where _id=4
		ContentValues values = new ContentValues();
		values.put("name", "jack");
		values.put("age", 13);
		int updateCount = database.update("person", values , "_id=?", new String[]{"4"});
		database.close();
		Toast.makeText(this, "updateCount="+updateCount, 1).show();
	}

	/*
	 * 删除
	 */
	public void testDelete(View v) {
		// 1. 得到连接
		DBHelper dbHelper = new DBHelper(this, 2);
		SQLiteDatabase database = dbHelper.getReadableDatabase();
		// 2. 执行delete delete from person where _id=2
		int deleteCount = database.delete("person", "_id=2", null);
		// 3. 关闭
		database.close();
		// 4. 提示
		Toast.makeText(this, "deleteCount=" + deleteCount, 1).show();
	}

	/*
	 * 查询
	 */
	public void testQuery(View v) {
		// 1. 得到连接
		DBHelper dbHelper = new DBHelper(this, 2);
		SQLiteDatabase database = dbHelper.getReadableDatabase();
		// 2. 执行query select * from person
		Cursor cursor = database.query("person", null, null, null, null, null, null);
		//cursor = database.query("person", null, "_id=?", new String[]{"3"}, null, null, null);
		//得到匹配的总记录数
		int count = cursor.getCount();
		
		//取出cursor中所有的数据
		while(cursor.moveToNext()) {
			//_id
			int id = cursor.getInt(0);
			//name
			String name = cursor.getString(1);
			//age
			int age = cursor.getInt(cursor.getColumnIndex("age"));
			Log.e("TAG", id+"-"+name+"-"+age);
		}
		// 3. 关闭
		cursor.close();
		database.close();
		// 4. 提示
		Toast.makeText(this, "count=" + count, 1).show();
	}

	/*
	 * 测试事务处理
	 * update person set age=16 where _id=1
	 * update person set age=17 where _id=3
	 * 
	 * 一个功能中对数据库进行的多个操作: 要就是都成功要就都失败
	 * 事务处理的3步:
	 * 1. 开启事务(获取连接后)
	 * 2. 设置事务成功(在全部正常执行完后)
	 * 3. 结束事务(finally中)
	 */
	public void testTransaction(View v) {
		
		SQLiteDatabase database = null;
		try{
			DBHelper dbHelper = new DBHelper(this, 2);
			database = dbHelper.getReadableDatabase();
			
			//1. 开启事务(获取连接后)
			database.beginTransaction();
			
			//执行update  update person set age=16 where _id=1
			ContentValues values = new ContentValues();
			values.put("age", 16);
			int updateCount = database.update("person", values , "_id=?", new String[]{"1"});
			Log.e("TAG", "updateCount="+updateCount);
			
			//出了异常
			boolean flag = true;
			if(flag) {
				throw new RuntimeException("出异常啦!!!");
			}
			
			//执行update  update person set age=17 where _id=3
			values = new ContentValues();
			values.put("age", 17);
			int updateCount2 = database.update("person", values , "_id=?", new String[]{"3"});
			Log.e("TAG", "updateCount2="+updateCount2);
			
			//2. 设置事务成功(在全部正常执行完后)
			database.setTransactionSuccessful();
			
		} catch(Exception e) {
			e.printStackTrace();
			Toast.makeText(this, "出异常啦!!!", 1).show();
		} finally {
			//3. 结束事务(finally中)
			if(database!=null) {
				database.endTransaction();
				database.close();
			}
		}
		
	}

}

操作数据库的工具类,继承抽象类SQLiteOpenHelper

package com.hbk.sqlite;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

/**
 * 数据库操作的帮助类
 *
 */
public class DBHelper extends SQLiteOpenHelper {

	public DBHelper(Context context,int version) {
		super(context, "atguigu.db", null, version);
	}

	/**
	 * 什么时候才会创建数据库文件?
	 * 	1). 数据库文件不存在
	 *  2). 连接数据库
	 * 
	 * 什么时候调用?
	 * 	当数据库文件创建时调用(1次)
	 * 在此方法中做什么?
	 * 	建表
	 * 	插入一些初始化数据
	 */
	@Override
	public void onCreate(SQLiteDatabase db) {
		Log.e("TAG", "DBHelper onCreate()");
		//建表
		String sql = "create table person(_id integer primary key autoincrement, name varchar,age int)";
		db.execSQL(sql);
		//插入一些初始化数据
		db.execSQL("insert into person (name, age) values ('Tom1', 11)");
		db.execSQL("insert into person (name, age) values ('Tom2', 12)");
		db.execSQL("insert into person (name, age) values ('Tom3', 13)");
	}

	//当传入的版本号大于数据库的版本号时调用
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		Log.e("TAG", "DBHelper onUpgrade()");
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黄宝康

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值