SQLite 是一個輕量級而又快速的數據庫。
SQLite 創建
在Android 中可以繼承SQLiteOpenHelper 類來操作SQLite 數據庫。
在Android 中,創建的數據庫都是在:/data/data/<packageName>/databases/<dataBaseName>
。
1. 繼承SQLiteOpenHelper
繼承SQLiteOpenHelper 類,重寫一個構造函數,OnCreate 函數和OnUpgrade 函數。
DBhelper.java
package cn.met0.android.chapter4;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
public class DBHelper extends SQLiteOpenHelper {
String user = "create table user(id integer primary key,username text,password text)";
String info = "create table info(id integer primary key,str text)";
public DBHelper(Context context, String name, CursorFactory factory,
int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(user);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
switch (newVersion) {
case 2:
db.execSQL(info);
break;
default:
break;
}
}
}
DBHelper(Context, String, CursorFactory, int)
用來獲取數據庫操作對象,Context 爲一個Activity對象、String數據庫名稱、CursorFactory 爲null ,int 爲版本號。
onCreate(SQLiteDatabase db)
當創建DBhelp對象時,如果傳入的name(數據庫名稱)不存在時,則執行這個方法,通常爲第一次初始化表結構。
onUpgrade(SQLiteDatabase , int , int )
當創建DBhelp對象時,如果數據庫已存在,並且傳入的版本號不同,則會執行這個方法,通常用來更新表結構。
2. 開始創建
MainActivity.java
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DBHelper db = new DBHelper(this, "user.db", null, 1);
SQLiteDatabase sql = db.getWritableDatabase();
sql.execSQL("insert into user (id,username,password) values (1,'admin','123456')");
}
插入數據
插入數據除了使用sql 語句外,還可以有更簡單的方式。
插入數據
DBHelper db = new DBHelper(this, "user.db", null, 2);
SQLiteDatabase sql = db.getWritableDatabase();
ContentValues value = new ContentValues();
value.put("id", 2);
value.put("username", "tom");
sql.insert("user", null, value);
ContentValues
對象是一個存儲一條記錄的對象
sql.insert("user", null, value);
Param | Context |
---|---|
“user” | 操作的表名 |
null | 默認爲null |
value | 插入的數據 |
更新數據
DBHelper db = new DBHelper(this, "user.db", null, 2);
SQLiteDatabase sql = db.getWritableDatabase();
ContentValues value = new ContentValues();
value.put("username", "jack");
value.put("password", "abcdef");
sql.update("user", value, "username = ?", new String[]{"tom"});
ContentValues
對象爲要更新的內容
sql.update("user", value, "username = ?", new String[]{"tom"});
Param | Context |
---|---|
“user” | 操作的表名 |
value | 要更新成的內容 |
“username = ?” | 更新條件 |
new String[]{“tom”} | 更新條件參數 |
刪除數據
DBHelper db = new DBHelper(this, "user.db", null, 2);
SQLiteDatabase sql = db.getWritableDatabase();
sql.delete("user", "username = ?", new String[]{"tom"});
sql.delete("user", "username = ?", new String[]{"tom"});
Param | Context |
---|---|
“user” | 操作的表名 |
“username = ?” | 刪除數據的條件 |
new String[]{“tom”} | 條件參數 |
查詢數據
DBHelper db = new DBHelper(this, "user.db", null, 2);
SQLiteDatabase sql = db.getWritableDatabase();
sql.query("user", null, null, null, null, null, null);
事務
DBHelper db = new DBHelper(this, "user.db", null, 2);
SQLiteDatabase sql = db.getWritableDatabase();
ContentValues value = new ContentValues();
value.put("username", "tom");
value.put("password", "123456");
try{
sql.beginTransaction();
sql.delete("user", "username = ?", new String[]{});
sql.insert("user", null, value);
sql.setTransactionSuccessful();
}catch (Exception e){
sql.endTransaction();
}finally{
sql.close();
}
sql.beginTransaction();
開啓事務
sql.setTransactionSuccessful();
提交事務
sql.endTransaction();
回滾事務
注意
在重寫OnCreate 方法時,不能寫插入sql語句,否則將會創建不成功。
除非創建對象後,也執行插入語句。