Android—數據存儲(二)

3、SQLLite存儲

思維導圖:



          SQLite是輕量級嵌入式數據庫引擎,它支持 SQL 語言,並且只利用很少的內存就有很好的性能。一般數據庫採用的固定的靜態數據類型,而SQLite採用的是動態數據類型,會根據存入值自動判斷。



SQLiteOpenHelper類介紹

SQLiteOpenHelperSQLiteDatabase的一個幫助類,用來管理數據庫的創建和版本的更新。一般是建立一個類繼承它,並實現它的onCreateonUpgrade方法。

方法名

方法描述

SQLiteOpenHelper(Context context,String name,SQLiteDatabase.CursorFactory factory,int version)

構造方法,其中

context 程序上下文環境 即:XXXActivity.this;

name :數據庫名字;

factory:遊標工廠,默認爲null,即爲使用默認工廠;

version 數據庫版本號

onCreate(SQLiteDatabase db)

創建數據庫時調用

onUpgrade(SQLiteDatabase db,int oldVersion , int newVersion)

版本更新時調用

getReadableDatabase()

創建或打開一個只讀數據庫

getWritableDatabase()

創建或打開一個讀寫數據庫

 



SQLiteDatabase的常用方法 

方法名稱

方法表示含義

openOrCreateDatabase(String path,SQLiteDatabase.CursorFactory  factory)

打開或創建數據庫

insert(String table,String nullColumnHack,ContentValues  values)

插入一條記錄

delete(String table,String whereClause,String[]  whereArgs)

刪除一條記錄

query(String table,String[] columns,String selection,String[]  selectionArgs,String groupBy,String having,String  orderBy)

查詢一條記錄

update(String table,ContentValues values,String whereClause,String[]  whereArgs)

修改記錄

execSQL(String sql)

執行一條SQL語句

close()

關閉數據庫

 

  創建數據庫

 1、首先新建一個Java類,DBHelper 繼承SQLiteOpenHelper

 2、重寫兩個方法和一個構造

onCreate(SQLiteDatabase db)    該方法只會被調用一次,可以用來創建表

onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)   該方法數據庫版本升級時調用的。低→高

DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version)     參數:context    上下文  name        數據庫的名字,“文件名.db”

  factory     數據庫工廠,null     version    數據庫版本

3、在Java類中使用

   DBHelper dbHelper=new DBHelper(this,"first.db",null,1);

  SQLiteDatabase sqLiteDatabase = dbHelper.getWritableDatabase();

注意:官方解釋讀取數據庫時使用getReadableDatabase,增刪改的時候用getWritableDatabase,但是實踐證明兩者都可以。

 代碼示例:

package com.zking.db;
 
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
 
/**
 * Created by Administrator on 2017/6/25 0025.
 */
 
public class DbHelper extends SQLiteOpenHelper{
 
    /**
     *
     * @param context    上下文
     * @param name        數據庫的名字,“文件名.db”
     * @param factory     數據庫工廠,null
     * @param version    數據庫版本
     */
    public DbHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
        Log.i("test","構造方法");
    }


 

    //使用該方法:創建表

    //只會調用一次

  

  @Override
    public void onCreate(SQLiteDatabase db) {
        Log.i("test","創建表");
        db.execSQL("create table login(uid integer primary key autoincrement,uname,upass)");
 //創建一個登陸表,UID,Integer類型,爲主鍵,自動增長,Uname,Upass三個列
    }

 

    //數據庫版本  低-->高

 

   @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.i("test","升級數據庫版本");
}

//降低版本時(一般不會使用)

//    @Override  
//    public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//        super.onDowngrade(db, oldVersion, newVersion);
//    }

  ①增

第一種:

  //實例化常量值   
  ContentValues cValue = new ContentValues();   
  //添加用戶名   
  cValue.put("uname","admin");   
  //添加密碼   
  cValue.put("upass","123456");   
  //調用insert()方法插入數據   
  sqLiteDatabase.insert("login,null,cValue);  


第二種:(執行SQL語句,程序員通常採用這樣,簡單明瞭。)

sqLiteDatabase.execSQL("insert into login(uname,upass) values('sa','123')");


  ②刪

第一種:

sqLiteDatabase.delete("login","uid=?",new String[]{102+""});


第一個參數(表名)第二個參數(要修改的條件,可以是多個)第三個參數(一 一對應前面的條件,但只能填String類型所以可拼接雙引號)

第二種:和數據庫中的sql語句一樣

sqLiteDatabase.execSQL("delete from  login where uid=1");

  ③改

第一種:

  ContentValues contentValues=new ContentValues();
        contentValues.put("uname",uname);
        contentValues.put("upass",upass);
       sqLiteDatabase.update("login",contentValues,"uid=?",new String[]{1+""});


第二種:和數據庫中一樣

sqLiteDatabase.execSQL("update login set uname=sa123  where uname=sa");


  ④查(因爲查是要返回信息的,所以我們用遊標接收(相當於集合))

第一種:(分頁查詢)

     

        int pageNo=2;
        int pageSize=3;
        Cursor cursor=sqLiteDatabase.rawQuery("select * from login limit ?,?",new String[]{((pageNo-1)*pageSize)+"",pageSize+""});
        while (cursor.moveToNext()){
            int uid=cursor.getInt(cursor.getColumnIndex("uid"));
            String name=cursor.getString(cursor.getColumnIndex("uname"));
            String pass=cursor.getString(cursor.getColumnIndex("upass"));
            Log.i("test",uid+" "+name+" "+pass);
        }

第二種:和數據庫中一樣,執行sql語句

 Cursor cursor=sqLiteDatabase.execSQL(“select * from login limit 1,3”);
 while (cursor.moveToNext()){
            int uid=cursor.getInt(cursor.getColumnIndex("uid"));
            String name=cursor.getString(cursor.getColumnIndex("uname"));
            String pass=cursor.getString(cursor.getColumnIndex("upass"));
            Log.i("test",uid+" "+name+" "+pass);
        }
 




4、ContentProvider存儲

《後面再講解》

5、網絡存儲

《後面再講解》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章