2013-06-29 36 views
7

cảm ơn bạn đã đọc và giúp đỡ :)Làm thế nào để cập nhật bảng với activeandroid sau khi thêm một cột mới

Tôi đang sử dụng ActiveAndroid 3.0 - Android 2.2 - Trong ứng dụng của tôi, tôi có một mô hình gọi là "người sử dụng". ban đầu tôi chỉ tạo mô hình với các cột/thuộc tính (id, name, passcode), tôi chạy ứng dụng trên trình mô phỏng và nó đã hoạt động.

@Table(name = "user") 
public class User extends Model { 
    @Column (name = "name") 
    public String name; 
    @Column (name = "pass_code") 
    public String passCode; 
} 

Sau đó, tôi đã thêm một cột/thuộc tính mới - profileImage. Tôi chạy các ứng dụng trên giả lập và tôi đã nhận hồ sơ cột SQLiteImage không tồn tại lỗi.

@Table(name = "user") 
public class User extends Model { 
    @Column (name = "name") 
    public String name; 
    @Column (name = "pass_code") 
    public String passCode; 
    @Column (name = "profile_image") 
    public String profileImage; 
} 

Tôi đã thử thay đổi tên db ActiveAndroid và cập nhật thuộc tính phiên bản db trong tệp kê khai.

<meta-data android:name="AA_DB_NAME" android:value="my_app.db" /> 
<meta-data android:name="AA_DB_VERSION" android:value="2" /> 

Nhưng tôi tiếp tục nhận được cột không tồn tại lỗi.

ERROR AndroidRuntime Caused by: android.database.sqlite.SQLiteException: 
no such column: profile_image: , while compiling: SELECT * FROM user WHERE profile_image = ? 

Tôi cũng đã thử, chưa cài đặt ứng dụng từ trình giả lập, khởi động lại trình mô phỏng, gọi ActiveAndroid.cacheClear(). Cho đến nay không ai trong số này làm việc.

Tôi thực sự đánh giá cao bất kỳ trợ giúp nào. cảm ơn.

Trả lời

19

Từ âm thanh của nó, bạn thiếu tập lệnh nâng cấp để di chuyển bảng user của bạn sang giản đồ mới. Các kịch bản nâng cấp về cơ bản chứa các hướng dẫn về cách lấy từ trạng thái cũ của cơ sở dữ liệu sang cơ sở dữ liệu mới. Trong trường hợp cụ thể của bạn, bạn sẽ muốn nói với SQLite rằng nó sẽ thêm một cột mới, profile_image, vào bảng người dùng hiện tại.

Để nâng cấp cơ sở dữ liệu của bạn từ sơ đồ 1 lên 2, hãy tăng giá trị AA_DB_VERSION lên 2 và cung cấp cho tập lệnh nâng cấp tên 2.sql. Lưu file dưới assets/migrations và cung cấp cho nó các nội dung sau đây:

ALTER TABLE user ADD profile_image TEXT; 

Các kịch bản có thể chứa bất kỳ tập hợp các câu lệnh SQL có thể được thực hiện bởi các SQLiteDatabase qua execSQL(...).

Thêm chi tiết về di chuyển giản đồ bằng Android hoạt động có thể được tìm thấy trong the wiki on the GitHub project page.

+0

cảm ơn sự giúp đỡ, được đánh giá cao. – dagger

+1

Ngoài sự tò mò, không nên xóa ứng dụng và cài đặt lại ứng dụng đã hoạt động? Hoặc loại bỏ các ứng dụng không loại bỏ các DB là tốt? –

+1

@JoshPinter: Có, việc gỡ cài đặt ứng dụng sẽ hoạt động. Như một vấn đề của thực tế, nhấn 'Clear Data' nên làm theo dõi quá. Đó không phải là giải pháp dài hạn, bởi vì có thể bạn không muốn người dùng ứng dụng của mình trải qua quá trình đó. Cách tiếp cận đúng là cung cấp logic nâng cấp lược đồ thích hợp. –

1

Các "TEXT" nhãn được đổi thành "VARCHAR" cho việc di chuyển cơ sở dữ liệu sử dụng ActiveAndroid

Tất cả các từ Reserved khác được nhấn mạnh ngoại trừ "TEXT". Tôi đã sử dụng "VARCHAR" và nó đã hoạt động.

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