2011-06-21 35 views

Trả lời

4

Trong phương thức SQLiteOpenHelper onCreate() bạn chỉ có thể sử dụng db.execSQL(...) nhưng điều đó phụ thuộc vào cách 'tệp văn bản' của bạn được cấu trúc (và kích cỡ lớn như thế nào).

Ngoài ra, bạn có thể 'tàu' một db SQLite với ứng dụng của bạn - xem liên kết này cung cấp cho bạn một số ý tưởng ...

Using your own SQLite database in Android applications

+0

Có cách nào để có được điều đó '/ dữ liệu/dữ liệu/YOUR_PACKAGE/cơ sở dữ liệu /' đường dẫn, mà không cần phải hardcode nó? – rid

+1

@Radu: Thử http://developer.android.com/reference/android/content/Context.html#getDatabasePath cho 'getDatabasePath (...)' – Squonk

5

Tôi phải giải quyết cùng một vấn đề. Không thể tìm một cách trực tiếp để làm điều đó, vì vậy tôi đặt tệp vào thư mục res/raw và sử dụng openRawResource để nhận InputStream trên đó. Sau đó tôi đọc các dòng cho đến khi kết thúc bằng một số ;. Sau đó tôi chuyển câu lệnh tới cơ sở dữ liệu sqlite.

Hy vọng rằng một người khác đến cùng với một cách tốt hơn, nhưng tôi nghĩ tôi sẽ chỉ thêm cách mà tôi đã kết thúc làm việc đó.

0

Vấn đề với nhập khẩu tập tin SQLite db của riêng bạn là bạn phải đảm bảo phiên bản động cơ bạn đã tạo tệp phù hợp với phiên bản động cơ trên thiết bị Android mà db đang được cài đặt. bằng cách chạy tập lệnh SQL bạn đảm bảo rằng cơ sở dữ liệu đang được tạo bằng cách sử dụng công cụ thực sự được cài đặt trên thiết bị Android.

4

Làm theo câu trả lời của Steve Prentice. Đó là thực hiện của tôi:

tập tin mydb.sql trong res/raw

CREATE TABLE table1(col1 INTEGER PRIMARY KEY, col2 TEXT); 
CREATE TABLE table2(col1 INTEGER PRIMARY KEY, col2 TEXT, col3 INTEGER); 

MyClass.java

InputStream inputStream = context.getResources().openRawResource(R.raw.mydb); 

    String queries = ""; 
    try { 
     queries = IOUtils.toString(inputStream); 
    } catch (IOException e) { 
     Util.logException(e); 
    } 

    for (String query : queries.split(";")) { 
     db.execSQL(query); 
    } 
Các vấn đề liên quan