2011-07-08 28 views
6

Tôi đang sử dụng Ormlite để duy trì một số dữ liệu từ ứng dụng Android của tôi (chạy trên Motorola Xoom). Theo mặc định, cơ sở dữ liệu sql được lưu vào/data/data/[tên gói]/databases/[dbname] .db. Rắc rối là, Xoom không phải là bắt nguồn từ và do đó người dùng không có quyền truy cập vào thư mục mà db được lưu (không thể sao chép/sao lưu/chỉnh sửa nội dung của db).Android, Ormlite, DB location

Tôi đã thêm một số mã bổ sung vào một trong các lớp để sao chép db từ/dữ liệu vào thẻ sd, hoạt động tốt, nhưng thực tế tôi nghĩ rằng có thể thiết lập đường dẫn cho nơi lưu trữ db. Tôi có thiếu cái gì đó, hoặc điều này là không thể với Ormlite?

Xin cảm ơn trước, C

+0

Bạn đang cố gắng lưu dữ liệu vào một vị trí khác? Tôi không rõ chính xác bạn muốn làm gì. –

Trả lời

2

Bạn có thể làm điều gì đó giống như những gì anh chàng trong https://stackoverflow.com/a/3911641 đã làm.

Khi bạn tạo đối tượng sẽ thực hiện các giao dịch db của bạn, hãy ghi đè getReadableDatabase và getWriteableDatabase để sử dụng đường dẫn tùy chỉnh của bạn. Mọi thứ như thế này:

@Override 
public synchronized SQLiteDatabase getWritableDatabase(){ 
    return SQLiteDatabase.openDatabase("/sdcard/mydatabase.db", null, SQLiteDatabase.OPEN_READWRITE); 
} 

@Override 
public synchronized SQLiteDatabase getReadableDatabase(){ 
    return SQLiteDatabase.openDatabase("/sdcard/mydatabase.db", null, SQLiteDatabase.OPEN_READONLY); 
} 

Nếu tôi viết ứng dụng của bạn, tôi sẽ không đặt db trên thẻ SD. Nếu người dùng đang sao chép dữ liệu từ đó, ứng dụng sẽ không thể truy cập vào nó. Tôi sẽ cung cấp một chức năng 'sao lưu' sẽ tạo một tệp trên thẻ SD trong một cái gì đó như XML, JSON hoặc CSV. Sau đó, nó sẽ được vào người dùng để sao lưu vào lưu trữ từ xa và bạn biết rằng bạn sẽ luôn luôn có thể nhận được để db của bạn. Trừ khi bạn muốn tạo ra một lưu trữ tạm thời và hợp nhất tất cả mọi thứ trên thẻ sd khi nó trở thành avalible ... Nhưng điều đó nghe có vẻ như rất nhiều công việc sau đó nó có giá trị. Tôi hy vọng điều này đã trả lời câu hỏi của bạn!

6

Bạn có thể tạo cơ sở dữ liệu trên SDCard nếu bạn sử dụng một cái gì đó giống như

public class DatabaseHelper extends OrmLiteSqliteOpenHelper { 
[...] 
public DatabaseHelper(final Context context) { 
    super(context, Environment.getExternalStorageDirectory().getAbsolutePath() 
    + File.separator + DATABASE_NAME, null, DATABASE_VERSION); 
} 

Điều này tạo ra file db trong ví dụ /mnt/sdcard/Android/data/com.your.app/files/myData.sqlite Pro: lưu bộ nhớ trong Con: DB không thể truy cập được khi SDCard không khả dụng (ví dụ: khi nó được kết nối với PC) Ngoài ra, nó có thể được đọc bởi bất cứ ai có thể là chuyên nghiệp hay con.

Sử dụng context.getExternalFilesDir() thay vì Environment.getExternalStorageDirectory() sẽ sử dụng vị trí cụ thể cho ứng dụng của bạn và sẽ tự động được xóa sau khi gỡ cài đặt (và nó cũng xuất hiện trên bản cập nhật ứng dụng).

P.S. Tôi đọc ở đâu đó rằng cách tiếp cận này có thể không hoạt động trên các phiên bản Android trước 2.2 (?)