我的android 第16天 - SQLite数据库

我的android 第16天 - SQLite数据库

 

 

 

   

  SQLite 一个非常流行的嵌入式数据库,它支持SQL 语言,并且只利用很少的内存就有很好的性能,android内部集成了SQLite数据库,通过它很方面实现对数据的管理

  案例:运用SQLite实现对个人信息的增删改查

实现流程

   1、创建数据库

   . 新建类继承SqliteOpenHelper通过getWritableDatabase或者geReadableDatabase获得数据库对象SqliteDatabase db

   . public void onCreate(SQLiteDatabase db)

      数据库第一次创建时调用,一般在这个方法创建表

   onUpgrade(SQLiteDatabase dbint oldVersionint

       newVersion)

      当数据库版本更新时调用,一般在这个方法中更改表字段、增加删除表

       . DBHelper

 

publicclass DBHelperextends SQLiteOpenHelper {
  		/**
 		  * 数据库文件名
  		 * 文件位置:/data/data/包名/databases
 		  */
 		 private static final String NAME = "person.db";
 
 		 private static final intVERSION = 2;
 
 		 public DBHelper(Contextcontext) {
 		 // version : 数据库版本号,必须大于等于1
  		super(context, NAME, null, VERSION);
 		 }
 
 		 /**
 		  * 在第一次创建数据库的时候调用
		   *一般在这里创表
  		 */
		  public void onCreate(SQLiteDatabase db) {
		  System.out.println("onCreate");
 
		  StringBuffer sb =new StringBuffer("createtable ").append(PersonMgr.TABLE).append("(")
  		   .append(PersonMgr.ID).append(" integerprimary key autoincrement,")
   		  .append(PersonMgr.NAME).append(" text,")
   		  .append(PersonMgr.MONEY).append("integer); ");
  		db.execSQL(sb.toString());
 		 }
 
 		 /**
  		 * 当数据库版本号变更的时候调用
  		 *一般在这里更改表字段,或者添加删除表
  		 */
 		 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  		System.out.println("onUpgrade");
  		db.execSQL("droptable  if exists "+ PersonMgr.TABLE);
 
 		 onCreate(db);
  		 }
		}

 

 

   2、增删改查操作CRUD

   创建数据库操作类PersonMgr    

   . db.insert(TABLE, null, values);

       values 为 ContentValues 类型,以键值对形式存储字段数据

   db.deletetablewhere) table:表  where条件

       . db.update(TABLE, values,where

       db.execSql(String sql)

       Db.close()数据库关闭

       .PersonMgr

 

public int save(ContentValues values) {
		// 打开数据库
		SQLiteDatabase db = helper.getWritableDatabase();
		// 插入数据
		Long id = db.insert(TABLE, null, values);
		// 关闭数据库
		db.close(); 
		return id.intValue();
	}
	
	/**
	 * 删除联系人
	 * @param id 主键
	 * @return 返回值等于1代表删除成功
	 */
	public int delete(int id) {
		SQLiteDatabase db = helper.getWritableDatabase();
		int result = db.delete(TABLE, ID + " = ?", new String[]{String.valueOf(id)});
		db.close();
		return result;
	}
	
	/**
	 * 更新联系人
	 * @param values 要更新的数据
	 * @return 返回值等于1代表更新成功 
	 */
	public int update(ContentValues values) {
		String id = values.getAsString(ID);
		
		SQLiteDatabase db = helper.getWritableDatabase();
		int result = db.update(TABLE, values, ID + "=?", new String[]{id});
		db.close();
		return result;
	}
	
	public ArrayList<HashMap<String, Object>> find() {
		SQLiteDatabase db = helper.getReadableDatabase();
		Cursor cursor = db.query(TABLE, null, null, null, null, null, MONEY + " desc ");
		
		ArrayList<HashMap<String, Object>> data = new ArrayList<HashMap<String,Object>>();
		while (cursor.moveToNext()) {
			HashMap<String, Object> map = new HashMap<String, Object>();
			map.put(ID, cursor.getInt(cursor.getColumnIndex(ID)));
			map.put(NAME, cursor.getString(cursor.getColumnIndex(NAME)));
			map.put(MONEY, cursor.getInt(cursor.getColumnIndex(MONEY)));
			
			data.add(map);
		}
		
		db.close();
		return data;
	}
	public Cursor findByCusor() {
		SQLiteDatabase db = helper.getReadableDatabase();
		return db.query(TABLE, null, null, null, null, null, MONEY + " desc ");
	}
	
	public void pay(int fromUser, int toUser, int money) {
		SQLiteDatabase db = helper.getWritableDatabase();
		try {
			// 开始事务
			db.beginTransaction();
			db.execSQL("update t_person set money=money-"+money+" where _id = "+fromUser);
			
			db.execSQL("update t_person set money=money+"+money+" where _id = "+toUser);
			
			// 标记为提交事务
			db.setTransactionSuccessful();
		} finally {
			// 结束事务(默认是回滚事务)
			db.endTransaction();
		}
	}

 

 

 

 

   3、事务处理

   .开启事务db.beginTransaction();  

   .标记为提交事务 db.setTransactionSuccessful();

   结束事务 db.endTransaction();

三、关注点

   . SqliteOpenHelper类的onCreate()、onUpdate()方法  

   . ContentValues类与HashMap类似,以键值对的形式存放数据,在条件

      查询中经常用户

   SimpleCursorAdapter适配器:使用条件数据库主键名必须为_id

   . SQLite事务处理

 

 

 

 

 

 

下载视频代码

你可能感兴趣的:(android)