Android之SQLite數據庫存儲

Android之SQLite數據庫存儲

一. 創建數據庫

  1. 創建一個 “數據庫管理器” 實體類來繼承 SQLiteOpenHelper抽象類。其中需要重寫兩個方法用於創建數據庫和升級數據庫:onCreate()onUpgrade()

  2. 數據庫管理器的構造方法接收四個參數。第一個是context(環境),第二個是數據庫名,第三個是查詢數據返回的自定義的cursor、一般都是null,第四個是數據庫的版本號。

  3. 數據庫管理器實例的兩種方法,getReadableDatabase()getWritableDatabase()。這兩個都可以創建或打開一個數據庫,沒有的時候創建,存在的時候直接打開就行操作。(當數據庫不可以寫入的時候read以只讀方式打開,而write方式會出錯。)

創建一個BookStore.db數據庫,其中新建Book表

 create table Book(
     id integer primary key autoincrement,
     author text,
     price real,
     pages integer,
     name text
    )

這是SQL語句,代碼如下:

  public class MyDatabaseHelper extends SQLiteOpenHelper {
 
      /*建表語句定義成了一個字符串常量*/
      public static final String CREATE_BOOK =
              "create table Book("
                      + "id integer primary key autoincrement,"
                      + "author text,"
                      + "price real,"
                      + "pages integer,"
                     + "name text)";
 
     private Context mContext;
 
     /*數據庫管理器構造方法*/
     public MyDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
         super(context, name, factory, version);
         mContext = context;
     }
 
     /*創建數據庫,同時創建表*/
     @Override
     public void onCreate(SQLiteDatabase db) {
         db.execSQL(CREATE_BOOK);
         Toast.makeText(mContext, "Create succeeded", Toast.LENGTH_LONG).show();
     }
 
     /*升級數據庫*/
     @Override
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)       {
     }
}

在佈局中寫一個創建按鈕,然後MainActivity中的代碼如下:

  public class MainActivity extends AppCompatActivity {
  
      private MyDatabaseHelper dbHelper;
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
  
         dbHelper = new MyDatabaseHelper(this, "BookStore.db", null, 1);
         Button createDatabase = (Button) findViewById(R.id.create_database);
         createDatabase.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View view) {
                 dbHelper.getWritableDatabase();
             }
         });
     }
 }

二. 添加數據

用insert()方法添加數據。
insert()方法接收三個參數:

  • “表名”
  • “默認空值”
  • “傳入組裝好的數據values”

而其中用到的contentvalues數據類型則是用來組裝傳入內容的。相當於一個map組,用put來壓入數據。用完後要記得clear();代碼如下:

          /*插入數據,insert方法傳入三個參數,“表名”“默認空值”“傳入組裝好的數據values”*/
          Button addData = (Button) findViewById(R.id.add_data);
          addData.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View view) {
                  SQLiteDatabase db = dbHelper.getWritableDatabase();
                 /*用contentValues來組裝要插入的數據 未賦值的自動生成默認值*/
                 ContentValues values = new ContentValues();
  //                開始組裝第一組數據
                 values.put("name", "The da vi code");
                 values.put("author", "Dan");
                 values.put("pages", 434);
                 values.put("price", 13.33);
                 db.insert("Book", null, values);//輸入第一行數據
                 values.clear();//清空values。
 
				 //   開始組裝第二條數據
                 values.put("name", "The lost");
                 values.put("author", "mask");
                 values.put("pages", 12);
                 values.put("price", 999);
                 db.insert("Book", null, values);//輸入第二行數據
                 values.clear();//清空values。
             }
         });

三. 更新數據

使用update()方法,傳入四個參數,分別是:

  • “表名”
  • “contentvalues值 修改的內容值”
  • “SQL語句中的where約束條件”
  • “where中的具體限定值”

同樣將要改變的數據壓入contentvalues中,然後傳入。代碼如下:

          /*更新數據,使用update方法,傳入四個參數,
          “表名”“修改的內容值”“SQL語句中的where”“where中的具體限定值”*/
          Button updateData = (Button) findViewById(R.id.update_data);
          updateData.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View view) {
                  SQLiteDatabase db = dbHelper.getWritableDatabase();
                  ContentValues values = new ContentValues();
                  values.put("price", 1.2);
                 db.update("Book", values, "name=?", new String[]{"The da vi code"});
             }
         });

四. 刪除數據

使用delete()方法,不需要用content數據來傳數據,因爲只需要指定相應的數據進行刪除即可。delete()方法傳入三個參數:

  • “表名”
  • “SQL語句中的where約束條件”
  • “where中的具體限定值”

代碼如下:

          /*刪除數據,使用delete方法,傳入三個參數,
          * “表名”“SQL語句中的where”“where中的具體限定值”*/
          Button deleteButton = (Button) findViewById(R.id.delete_data);
          deleteButton.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View view) {
                 SQLiteDatabase db = dbHelper.getWritableDatabase();
                  db.delete("Book", "pages>?", new String[]{"20"});
              }
         });

查詢數據

同時需要用到cursor對象(光標)來輸出查詢結果,將查詢結果賦給cursor對象,得到的cursor對象。

接着調用他的moveToFirst()方法將數據指針移動到第一行開始,然後加入循環,遍歷每一行數據,通過moveToNext()來進行跳轉。

通過cursor的getColumnIndex()方法獲得某一列在表中位置索引,然後將索引傳入相應的取值方法中,得到對應的數據。使用完後需要將cursor通過close關閉。

 /*查詢數據,使用query方法,傳入參數較多。*/
          Button queryButton = (Button) findViewById(R.id.query_data);
          queryButton.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View view) {
                  SQLiteDatabase db = dbHelper.getWritableDatabase();
                  //查詢book中所有數據
                  Cursor cursor = db.query("Book", null, null, null, null, null, null);
                  if (cursor.moveToFirst()) {
                     do {
                         //遍歷cursor對象 取出數據並打印
                         String name = cursor.getString(cursor.getColumnIndex("name"));
                         String author = cursor.getString(cursor.getColumnIndex("author"));
                         int pages = cursor.getInt(cursor.getColumnIndex("pages"));
                         double price = cursor.getDouble(cursor.getColumnIndex("price"));
                         Log.d("MainActivity", "book name is " + name);
                         Log.d("MainActivity", "book author is " + author);
                        Log.d("MainActivity", "book pages is " + pages);
                         Log.d("MainActivity", "book price is " + price);
                     }while (cursor.moveToNext());
                 }
                 cursor.close();
             }
         });
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章