安卓手機開發之Sqlite 資料應用與初始化

來源:互聯網
上載者:User

建立資料庫

Android 不自動提供資料庫。在 Android 應用程式中使用 SQLite,必須自己建立資料庫,然後建立表、索引,填充資料。Android 提供了 SQLiteOpenHelper 協助你建立一個資料庫,你只要繼承 SQLiteOpenHelper 類,就可以輕鬆的建立資料庫。SQLiteOpenHelper 類根據開發應用程式的需要,封裝了建立和更新資料庫使用的邏輯。SQLiteOpenHelper 的子類,至少需要實現三個方法:

•建構函式,調用父類 SQLiteOpenHelper 的建構函式。這個方法需要四個參數:上下文環境(例如,一個 Activity),資料庫名字,一個可選的遊標工廠(通常是 Null),一個代表你正在使用的資料庫模型版本的整數。
•onCreate()方法,它需要一個 SQLiteDatabase 對象作為參數,根據需要對這個對象填充表和初始化資料。
•onUpgrage() 方法,它需要三個參數,一個 SQLiteDatabase 對象,一箇舊的版本號碼和一個新的版本號碼,這樣你就可以清楚如何把一個資料庫從舊的模型轉變到新的模型。
下面範例程式碼展示了如何繼承 SQLiteOpenHelper 建立資料庫:

 代碼如下 複製代碼

 public class DatabaseHelper extends SQLiteOpenHelper {    
  DatabaseHelper(Context context, String name, CursorFactory cursorFactory, int version)
  {    
    super(context, name, cursorFactory, version);    
     }    
    
     @Override   
     public void onCreate(SQLiteDatabase db) {    
         // TODO 建立資料庫後,對資料庫的操作    
     }    
    
     @Override   
 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {    
         // TODO 更改資料庫版本的操作    
     }    
    
 @Override   
 public void onOpen(SQLiteDatabase db) {    
         super.onOpen(db);      
         // TODO 每次成功開啟資料庫後首先被執行    
     }    
 }    
 


接下來討論具體如何建立表、插入資料、刪除表等等。調用 getReadableDatabase() 或 getWriteableDatabase() 方法,你可以得到 SQLiteDatabase 執行個體,具體調用那個方法,取決於你是否需要改變資料庫的內容:

 

 代碼如下 複製代碼
db=(new DatabaseHelper(getContext())).getWritableDatabase();
 return (db == null) ? false : true;

 


上面這段代碼會返回一個 SQLiteDatabase 類的執行個體,使用這個對象,你就可以查詢或者修改資料庫。

當你完成了對資料庫的操作(例如你的 Activity 已經關閉),需要調用 SQLiteDatabase 的 Close() 方法來釋放掉資料庫連接。

android系統下每個程式的資料存放在 /data/data/(package name)/ 目錄下,資料庫則是在/dababases/目錄下..
所以,你只要用FileInputStream讀取原資料庫,再用FileOutputStream把讀取到的東西寫入到那個目錄就可以了..

操作方法:
1. 把原資料庫包括在項目源碼的 res/raw 目錄下.
2.建立一個類來控制database..如下:


代碼

 代碼如下 複製代碼

public class DatabaseManager{
                private final int BUFFER_SIZE = 400000;
                public static final String DB_NAME = "myDatabase.db"; //儲存的資料庫檔案名
                public static final String PACKAGE_NAME = "com.android.ImportDBTest";//包名
                public static final String DB_PATH = "/data"
                     + Environment.getDataDirectory().getAbsolutePath() + "/"
                     + PACKAGE_NAME; //在手機裡存放資料庫的位置

                private SQLiteDatabase database;
                private Context context;

                DBManager(Context context) {
                     this.context = context;
                }

                public void openDatabase() {
                     this.database = this.openDatabase(DB_PATH + "/" + DB_NAME);
                }

                private SQLiteDatabase openDatabase(String dbfile) {
                     try {
                     if (!(new File(dbfile).exists())) {  //判斷資料庫檔案是否存在,若不存在則執行匯入,否則直接開啟資料庫
                     InputStream is = this.context.getResources().openRawResource(
                     R.raw.myDatabase); //欲匯入的資料庫
                     FileOutputStream fos = new FileOutputStream(dbfile);
                     byte[] buffer = new byte[BUFFER_SIZE];
                     int count = 0;
                     while ((count = is.read(buffer)) > 0) {
                     fos.write(buffer, 0, count);
                     }
                     fos.close();
                     is.close();
                     }
                     SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbfile,
                     null);
                     return db;
                     } catch (FileNotFoundException e) {
                     Log.e("Database", "File not found");
                     e.printStackTrace();
                     } catch (IOException e) {
                     Log.e("Database", "IO exception");
                     e.printStackTrace();
                     }
                     return null;
}

然後在需要用到資料庫的時候,用執行個體化一個DatabaseManager類,調用其openDatabase方法就可以返回一個
SQLiteDatabase對象了..如下:
代碼

 代碼如下 複製代碼

SQLiteDatabase db = new DBManager(this).openDatabase();


這裡只是安卓手機開發的一個角

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.