2010-03-09 32 views
26

Tôi đang làm việc trên một ứng dụng Android sẽ cần một số mục (một bảng, với 1000-10000 hàng) được điền trong cơ sở dữ liệu của ứng dụng đó trước khi người dùng có thể sử dụng ứng dụng đó. Tôi đã xem xét một số hướng dẫn và tôi không chắc chắn cách tốt nhất để làm điều này. Tôi có nên kiểm tra xem cơ sở dữ liệu có tồn tại mỗi khi ứng dụng được khởi động hay không, nếu nó không có ở đó, hãy tạo và chèn hàng nghìn bản ghi mà tôi cần? Hoặc là có một cách tốt hơn để xử lý vấn đề này? Lý tưởng nhất, nó có thể được bao gồm như là một phần của quá trình cài đặt của ứng dụng, nhưng tôi không chắc chắn nếu điều này là có thể. Bất kì phản hồi nào cũng sẽ được đánh giá cao.Android Pre-Populated Database

+0

http://stackoverflow.com/a/9109728/265167 –

+1

Tôi không muốn đăng câu trả lời này vì nó không thực sự. Xem xét viết Java để xây dựng cơ sở dữ liệu _on Android_ (ví dụ: từ tệp CSV được đẩy với ADB). Sau đó, nén nó vào '/ asset' để cài đặt. Đang cố gắng khớp chính xác với những gì mà Android mong đợi trong môi trường không phải Android đã khiến tôi trở thành một bước xây dựng mong manh. – Gene

+0

@ JonDiY212 HTML không hợp lệ trong liên kết của bạn. – Noumenon

Trả lời

17

Liên kết này có câu trả lời tốt Ship an application with a database

+4

Đây là liên kết được hiển thị là Câu trả lời hay nhất trong câu hỏi SO được tham chiếu. Đó là một bài viết thực sự tuyệt vời về phân phối cơ sở dữ liệu dựng sẵn với ứng dụng Android của bạn: http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/ –

+0

Tương tự nhưng briefer : http://www.helloandroid.com/tutorials/how-have-default-database –

+0

http: // stackoverflow.com/questions/9109438/using-already-created-database-with-android/9109728 # 9109728 –

3

cách tôi sẽ đến đây là gửi cơ sở dữ liệu đã được chuẩn bị sẵn trong thư mục nội dung. Bạn có thể thả các tập tin ở đó và sử dụng chúng như chúng. Hãy coi chừng, tuy nhiên, có giới hạn kích thước là 1MB, vì vậy có thể bạn sẽ phải chia nhỏ tệp hoặc nén chúng.

Nén khá tiện dụng và được hỗ trợ tốt bởi chính hệ điều hành.

niềm hy vọng này là của bất kỳ sự giúp đỡ :-)

+1

Giới hạn kích thước là 1 MB. –

1

JavaDoc từ SQLiteOpenHelper:

Một lớp helper để quản lý cơ sở dữ liệu tạo và quản lý phiên bản. Bạn tạo một lớp con thực hiện onCreate (SQLiteDatabase), onUpgrade (SQLiteDatabase, int, int) và tùy chọn OnOpen (SQLiteDatabase), và lớp này sẽ chăm sóc của mở cơ sở dữ liệu nếu nó tồn tại, tạo ra nó nếu nó không, và nâng cấp nó thành cần thiết. Giao dịch được sử dụng để đảm bảo cơ sở dữ liệu luôn ở trạng thái hợp lý .

Ví dụ, xem lớp NotePadProvider trong ứng dụng mẫu NotePad , trong thư mục mẫu/ của SDK.

Vì vậy, nếu bạn mở rộng lớp này, bạn có 3 phương pháp sẽ được gọi trong một số trường hợp và bạn có thể chọn, phải làm gì. Thats thực hành tốt nhất :)

2

Dưới đây là một ví dụ về cách tạo và cư một cơ sở dữ liệu, bạn chỉ có thể làm điều này trên các cài đặt ứng dụng, điều này chỉ tạo ra một mục nhập mặc dù vì vậy có thể không hiệu quả cho những gì bạn muốn làm.

private static class settingsDatabaseHelper extends SQLiteOpenHelper{ 

    //SQL String for creating the table required 
    private static final String CREATE_SETTINGS_TABLE 
    = "CREATE TABLE tbl_settings(" + 
      "_ID INTEGER PRIMARY KEY AUTOINCREMENT," + 
      "VOIPUSERNAME TEXT," + 
      "VOIPAUTHID TEXT," + 
      "PASSWORD TEXT," + 
      "VOIPDISPLAYNAME TEXT," + 
      "SIPPROXYSERVER TEXT," + 
      "SIPREGISTRAR TEXT," + 
      "SIPREALM TEXT," + 
      "EXPIRESTIME INTEGER);";  

    //constructor 
    public settingsDatabaseHelper(Context context, String name, 
      CursorFactory factory, int version) { 
     super(context, name, factory, version); 

    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL(CREATE_SETTINGS_TABLE); 
     ContentValues initialValues = new ContentValues(); 
      initialValues.put("VOIPUSERNAME", "xxxxx"); 
      initialValues.put("VOIPAUTHID", "xxxxxxxxxx"); 
      initialValues.put("PASSWORD", "xxxxxx"); 
      initialValues.put("VOIPDISPLAYNAME", "xxxxxxxxx"); 
      initialValues.put("SIPPROXYSERVER", "xxxxxxxxxxxxx"); 
      initialValues.put("SIPREGISTRAR", "xxxxxxxxxxx"); 
      initialValues.put("SIPREALM", "xxxxxxxxxx"); 
      initialValues.put("EXPIRESTIME", xxxxxxxxxxx); 
      Log.d("1.6", "gets to here"); 
      db.insert(SETTINGS_TABLE, null, initialValues); 

    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     Log.w(TAG, "Upgrading database from version " + oldVersion + " to " + 
       newVersion + ", which will destroy all old data"); 

     db.execSQL("DROP TABLE IF EXISTS " + SETTINGS_TABLE); 
     onCreate(db); 

    } 

} 

//end helper class 
} 
+0

Giải thích cho phiếu bầu xuống vui lòng? –

+0

Tôi làm cách nào để thực hiện điều này 'trên cài đặt ứng dụng?' Đây có phải là phần mã được thực thi chỉ khi cài đặt không? –

Các vấn đề liên quan