3、SQLLite存儲
思維導圖:
SQLite是輕量級嵌入式數據庫引擎,它支持 SQL 語言,並且只利用很少的內存就有很好的性能。一般數據庫採用的固定的靜態數據類型,而SQLite採用的是動態數據類型,會根據存入值自動判斷。
SQLiteOpenHelper類介紹
SQLiteOpenHelper是SQLiteDatabase的一個幫助類,用來管理數據庫的創建和版本的更新。一般是建立一個類繼承它,並實現它的onCreate和onUpgrade方法。
方法名 |
方法描述 |
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、網絡存儲
《後面再講解》