SQLit數據庫 增 刪 改 查

SQLite數據庫

  • Sqlite簡介
    Sqlite是一款輕型的數據庫,它包含在一個相對小的C庫中,它的設計目標是嵌入式的,由于它占用資源非常少,可能只需要幾百K的內存就可以了,并且支持Windows/Linux/Unix等等主流的操作系統,同時可以和很多種程序語言相結合,比如:C#/Java/php等,所以在嵌入式設備中特別受歡迎,這一點也正好符合android的開發要求,所以在Android開發中經常要用到該數據庫。

  • SQlite內部結構
    在內部,Sqlite有以下幾個組件組成:SQL編譯器、內核、后端以及附件。Sqlite通過利用虛擬機和虛擬數據庫引擎,是調試、修改和擴展Sqlite的內核變得更加方便,所有SQL語句被編譯成易讀的、可以在Sqlite虛擬機中執行的程序集。

  • android中Sqlite的使用方法
    在Android中要想使用Sqlite數據庫,首先應該創建一個類繼承SQLiteOpenHelper類,我們把這個類命名為DatabaseHelper,它作為一個訪問Sqlite的助手類,提供了兩方面的功能:

    • getReadableDatabase()/getWritableDatabase()可以獲得SQLiteDatabase對象,通過該對象可以對數據庫進行操作;
    • 提供OnCreate()和onUpgrade()兩個回調函數,允許我們在創建和升級數據庫時,進行自己的操作;
范例:
  • 數據庫助手類
  • 自定義MySQLiteOpenHelper類 繼承SQLiteOpenHelper
public class MySQLiteOpenHelper extends SQLiteOpenHelper {
    // 數據庫文件名
    private final static String DB_NAME = "my_database.db";
    // 數據庫版本號
    private final static int DB_VERSION = 1;
    // 數據庫表名
    public final static String TABLE_NAME = "table_person";

    /**
     * 創建數據庫文件
     *
     * @param context 上下文
     * @param name    數據庫文件名
     * @param factory 游標工廠, 如果為null,Android系統提供默認的游標
     * @param version 數據庫版本號
     */
    public MySQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    //創建數據庫文件:
    public MySQLiteOpenHelper(Context context) {
        //創建了名為"my_database.db"數據庫,版本號 1  數據庫地址: data/data/com.w.Demo/databases/my_database.db
        super(context, DB_NAME, null, DB_VERSION);
    }

    /**
     * 創建了數據庫
     * @param db 系統返回的數據庫對象
     */
    @Override
    public void onCreate(SQLiteDatabase db) {
        // 創建表語句,語義:如果不存在則創建表,字段包括:主鍵_id,name,age
        /*注意: SQ語句: exists后面空格,()不要忘記*/
        String sql = "create table if not exists " + TABLE_NAME + "(_id integer primary key autoincrement, name varchar, age integer)";
        // 執行創建表的數據庫語句
        db.execSQL(sql);
    }

    /**
     * @param db  系統返回的數據庫對象
     * @param oldVersion 舊版本
     * @param newVersion 新版本
     */
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        if (oldVersion != newVersion) {
            Log.d("TAG", "onUpgrade: onUpgrade");
        }
    }
}
  • 使用數據助手類創建數據庫
MySQLiteOpenHelper mHelper =  new MySQLiteOpenHelper(this);
SQLiteDatabase dbSelect = mHelper.getReadableDatabase();
  • 具體增刪改查見下:

  • 創建或打開數據庫的方法

public SQLiteDatabase getDb() {
 //創建數據庫 my_database.db
        String filePath = Environment.getExternalStorageDirectory() + "/my_database.db";
        SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(filePath, null);
 //在數據庫中創建一張表 table_person
        String sql = "create table if not exists table_person(_id integer primary key autoincrement, name varchar, age integer)";
 // 執行創建表的數據庫語句
        database.execSQL(sql);
        return database;
}
  • 插入數據
    • 插入單條數據
SQLiteDatabase dbAdd = getDb();
ContentValues values = new ContentValues();
                values.put("name", "林志玲");
                values.put("age", 18);
                // table:要插入數據的表名
                //nullColumnHack:當插入數據為null時,nullColumnHack不允許為空,通過系統的處理保證了程序的穩定性;當插入數據不為null時,nullColumnHack排不上用場,為null
                // values:插入的數據
                dbAdd.insert("table_person", null, values);
  • 使用SQ語句插入多條數據
//得到數據庫
  SQLiteDatabase dbAdd = getDb();
                // 開始事務
                dbAdd.beginTransaction();
                try {
                    for (int i = 0; i < 10; i++) {
                        // 插入數據
                        String sql = "insert into table_person(name, age) values('林志玲', " + i + ")";
                        dbAdd.execSQL(sql);
                    }
                   //事務成功
                    dbAdd.setTransactionSuccessful();
                } catch (Exception e) {

                } finally {
                    //結束事務
                    dbAdd.endTransaction();
                }
                //關閉數據庫,節約內存資源
                dbAdd.close();
  • Transaction事務: 事務開始和結束之間的代碼要嗎全部執行要么不執行

  • 刪除數據

 SQLiteDatabase dbDelete = getDb();
                // 刪除數據庫指定表中的數據
                // table:表名
                // whereClause:刪除條件,格式“name = ?”
                // whereArgs:滿足刪除的條件,即刪除的數據,格式“"張三"”
                dbDelete.delete("table_person", "name = ?", new String[]{"林志玲"});
                dbDelete.close();
  • 修改數據
ContentValues contentValues = new ContentValues();
                contentValues.put("name", "張三");
                contentValues.put("age", 25);
                SQLiteDatabase dbModify = getDb();
                // table:表名
                // values:更新的數據
                // whereClause:更新條件
                // whereArgs:滿足更新的條件
                dbModify.update("table_person", contentValues, "name = ?", new String[]{"林志玲"});
                dbModify.close();
  • 查詢數據
               //得到數據庫;
                SQLiteDatabase dbSelect = getDb();
              // 查詢數據庫
                // table:表名
                // columns:被查詢的列(字段),可以有很多個
                // selection:查詢條件
                // selectionArgs:滿足查詢的條件
                // groupBy:指定分組(多數情況不使用)
                // having:分組篩選數據關鍵字(多數情況不使用)
                // orderBy:排序
                Cursor cursor = dbSelect.query("table_person", new String[]{"name", "age"}, null, null, null, null, null);
                int nameIndex = cursor.getColumnIndex("name");
                int ageIndex = cursor.getColumnIndex("age");
                //遍歷數據庫查詢數據  
                while (cursor.moveToNext()) {
                    String name = cursor.getString(nameIndex);
                    int age = cursor.getInt(ageIndex);
                   showText = showText + "姓名: " + name + "\t年齡: " + age + "\n";
                }
                 Log.d("TAG", "數據: " + showText );
                dbSelect.close();
                cursor.close();

-注意事項:

  • 若使用自定義的數據庫助手類創建了數據庫,數據庫存儲的位置為** data/data/com.w.Demo/databases/my_database.db**
  • 若使用創建或打開數據庫的方法,數據庫的位置為:/storage/emulated/0/my_database.db
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容