Android學習筆記(十六)——資料庫操作(上)

來源:互聯網
上載者:User

標籤:

  //此系列博文是《第一行Android代碼》的學習筆記,如有錯漏,歡迎指正!

  Android 為了讓我們能夠更加方便地管理資料庫,專門提供了一個 SQLiteOpenHelper協助類, 藉助這個類我們可以方便地對資料庫進行建立和升級。首先,由於SQLiteOpenHelpe是一個抽象類別,所以我們需要建立一個類來繼承它。SQLiteOpenHelper 中有兩個抽象方法,分別是onCreate()和 onUpgrade(),我們必須在自己的協助類裡面重寫這兩個方法,然後分別在這兩個方法中去實現建立、升級資料庫的邏輯。SQLiteOpenHelper 中 還 有 兩 個 非 常 重 要 的 實 例 方 法 , getReadableDatabase() 和getWritableDatabase()。這兩個方法都可以建立或開啟一個現有的資料庫(如果資料庫已存在則直接開啟,否則建立一個新的資料庫) ,並返回一個可對資料庫進行讀寫操作的對象。不同的是,當資料庫不可寫入的時候(如磁碟空間已滿)getReadableDatabase()方法返回的對象將以唯讀方式去開啟資料庫,而 getWritableDatabase()方法則將出現異常。

  SQLiteOpenHelper中有兩個構造方法可供重寫, 一般使用參數少一點的那個構造方法即可。這個構造方法中接收四個參數,第一個參數是 Context,這個沒什麼好說的,必須要有它才能對資料庫進行操作。第二個參數是資料庫名,建立資料庫時使用的就是這裡指定的名稱。第三個參數允許我們在查詢資料的時候返回一個自訂的 Cursor,一般都是傳入 null。第四個參數表示當前資料庫的版本號碼,可用於對資料庫進行升級操作。下面我們來試一試資料庫的使用。


一、建立 MyDatabaseHelper類繼承自 SQLiteOpenHelper:

 1 public class MyDatabaseHelper extends SQLiteOpenHelper { 2     public static final String CREATE_BOOK = "create table book (" 3             + "id integer primary key autoincrement, " 4             + "author text, " 5             + "price real, " 6             + "pages integer, " 7             + "name text)"; 8     private Context mContext; 9     public MyDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory10             factory, int version) {11         super(context, name, factory, version);12         mContext = context;13     }14     @Override15     public void onCreate(SQLiteDatabase db) {16         db.execSQL(CREATE_BOOK);17         Toast.makeText(mContext, "Create succeeded", Toast.LENGTH_SHORT).show();18     }19     @Override20     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {21     }22 }

  我們把建表語句定義成了一個字串常量,然後在 onCreate()方法中又調用了 SQLiteDatabase 的 execSQL()方法去執行這條建表語句,並彈出一個 Toast提示建立成功,這樣就可以保證在資料庫建立完成的同時還能成功建立 Book 表。

 

二、編寫布局檔案:

 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 2     xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" 3     android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" 4     android:paddingRight="@dimen/activity_horizontal_margin" 5     android:paddingTop="@dimen/activity_vertical_margin" 6     android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> 7  8     <Button 9         android:id="@+id/create_database"10         android:layout_width="match_parent"11         android:layout_height="wrap_content"12         android:text="Create database"13         />14 </RelativeLayout>
View Code

   我們在介面中加入了一個按鈕,用於建立資料庫。

 

三、修改 MainActivity中的代碼:

 1 public class MainActivity extends AppCompatActivity { 2  3     private MyDatabaseHelper dbHelper; 4     @Override 5     protected void onCreate(Bundle savedInstanceState) { 6         super.onCreate(savedInstanceState); 7         setContentView(R.layout.activity_main); 8         dbHelper = new MyDatabaseHelper(this, "BookStore.db", null, 1); 9         Button createDatabase = (Button) findViewById(R.id.create_database);10         createDatabase.setOnClickListener(new View.OnClickListener() {11             @Override12             public void onClick(View v) {13                 dbHelper.getWritableDatabase();14             }15         });16     }17 }
View Code

   我們在 onCreate()方法中構建了一個 MyDatabaseHelper對象,並且通過建構函式的參數將資料庫名指定為 BookStore.db,版本號碼指定為 1,然後在 Create database 按鈕的點擊事件裡調用了 getWritableDatabase()方法。這樣當第一次點擊 Create database按鈕時,就會檢測到當前程式中並沒有 BookStore.db這個資料庫, 於是會建立該資料庫並調用 MyDatabaseHelper中的 onCreate()方法,這樣 Book表也就得到了建立,然後會彈出一個 Toast提示建立成功。再次點擊 Create database按鈕時,會發現此時已經存在 BookStore.db資料庫了,因此不會再建立一次。

  程式運行如下:

  

  此時進入到com.mycompany.database/databases 中可看到BookStore已被建立了:

  

   這個目錄下出現了兩個資料庫檔案,一個正是我們建立的 BookStore.db,而另一個BookStore.db-journal 則是為了讓資料庫能夠支援事務而產生的臨時記錄檔,通常情況下這個檔案的大小都是 0 位元組。

 

  //End.

 

Android學習筆記(十六)——資料庫操作(上)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.