Sqlite 數據庫的增刪改查


SQLite 是一個輕量級的數據庫,支持SQL正規的SQL語句,可以存儲大量數據。

建立SQLite數據庫,要使用Android提供的一個SQLiteOpenHelper幫助類,需要新建一個類去繼承SQLiteOpenHelper類,重寫里面的兩個抽象方法,OnCreate()和OnUpgrade(),還要重寫有產構造方法,

有參構造重寫四個參數的,第一個參數是上下文,第二個是數據庫名稱,第三個是游標Cursor,通常給值null,第四個是當親數據庫的版本號。

public 重寫方法(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
        MyDatabaseHelper.this.context = context;
    }

onCreate()方法,調用SQLiteDatabase 對象的execSQL()方法,里面的參數是建表的SQL語句,

private String sql = "create table Book("
            +"id integer primary Key autoincrement,"
            +"author text,"
            +"price real,"
            +"pages integer,"
            +"name text)";
 @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        sqLiteDatabase.execSQL(sql);
    }

然后在主活動中new一個繼承SQLiteOpenHelper類的對象,並且調用getWritableDatabase()或getReadableDatabase()方法。這兩者都可以創建一個數據庫,或者數據庫存在就直接打開,但是當數據庫不可寫入的時候,getReaderDatabase()方法會以只讀的方式打開數據庫,getWritableDatabase()方法則會出現異常。

在創建數據庫的時候調用的getReaderDatabase() 或getWritableDatabase()會返回一個SQLiteDatabase對象,利用該對象調用相應的方法完成數據的增刪改查

增加數據:

  可以分為兩種方式:

  1:new一個ContentValues,該對象提供Put()方法,數據以鍵值對的形式儲存,SQLiteDatabase對象  ,提供一個insert()方法,它接受三個參數,第一是表名,第二是在未給指定列賦值時,默認為null,第三就是ContentValues對象。

  2:就是調用SQLiteDatabase對象 的execSQL()方法,里面傳值SQL語句。

  /* ContentValues values = new ContentValues();
                    values.put("author","周生磊");
                    values.put("price",22);
                    values.put("pages",33);
                    values.put("name","android");
                    db.insert("Book",null,values);
                    values.clear();*/
                    db.execSQL("insert into Book(author,price,pages,name) values(?,?,?,?)",new String[]{"周生磊","22","33","android"});

刪除數據:

  1.同上調用delete()方法。第一個參數表名,第二個限定條件,第三個限定條件的值。

  2:同上

 /* db.delete("book","name=?",new String[]{"android"});*/
                    db.execSQL("delete from book where name = ?",new String[]{"android"});

修改數據:

  1:同上,new 一個ContentValues對象,用來存放數據,SQLiteDatabase對象調用updata()方法,傳入四個參數,第一個表名,第二個需要修改的數據,第三個限定符,表示要修改哪一行等待傳值,第四個傳值具體修改哪幾行。

  2:SQLiteDatabase對象的execSQL()方法,寫入SQL語句。

 /*ContentValues values1 = new ContentValues();
                    values1.put("price",5435);
                    db.update("book",values1,"name=?",new String[]{"android"});*/
                    db.execSQL("update Book set price = ? where name =?",new String[]{"4533","android"});

查詢數據:最復雜的

  1:查詢數據需要調用rawQuery()方法,該方法返回值是一個Cursor(游標),利用Cursor遍歷查詢結果,首先確認cursor是否為空,調用cursor.moveToFirst(),該方法移動Cursor到第一行,如果為空就返回False,否則就是true,在進行循環進行遍歷,利用Cursor.GetString(),方法得到該列的具體參數,看到下面代碼很多人會疑問,為什么不在.GetString(),方法內直接傳入列名,而是又調用了一個Cursor.GetColumnIndex()呢?那是應為.GetString()方法內只接受Int類型的值,而.GetColumnIndex(),接受String值,返回int值,而GetColumnIndex()方法返回的int值是該列的下標,所以利用返回值得相互轉變得到我們想要的數據值。簡直完美,不是嗎?

  2:調用的是RawQuery()方法,而不是execSQL()方法,里面寫入SQL語句,查詢全部則第二個限定參數為null,第二個參數類型為new String[]{}類型,用法同上一樣,SQL語句?限定,new String[]{}里面給‘?‘賦值。

/*Cursor cursor = db.query("book",null,null,null,null,null,null);*/
                    Cursor cursor = db.rawQuery("select * from Book",null);
                    if (cursor.moveToFirst()){
                        do {
                            //遍歷Cursor對象,並打印
                            String author = cursor.getString(cursor.getColumnIndex("author"));
                            int price = cursor.getInt(cursor.getColumnIndex("price"));
                            int pages = cursor.getInt(cursor.getColumnIndex("pages"));
                            String name = cursor.getString(cursor.getColumnIndex("name"));
                            String show = "author:"+author+",price:"+price+",pages:"+pages+",name:"+name;
                            et_show.setText(show);
                        }while (cursor.moveToNext());
                    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM