2012-11-05 16 views
5

Tôi đã phát triển một ứng dụng Android bao gồm cơ sở dữ liệu. Khi tôi cài đặt nó trên thiết bị di động, nó hoạt động tốt cho lần đầu tiên. khi tôi thực hiện một số thay đổi trong cơ sở dữ liệu và cài đặt lại nó mà không gỡ cài đặt phiên bản đã cài đặt trước đó, nó sẽ bị treo.Ứng dụng Android bị treo khi thực hiện một số thay đổi trong cơ sở dữ liệu

Lưu ý: Tôi không muốn gỡ cài đặt phiên bản trước của mình vì tôi muốn giữ lại dữ liệu đã lưu trước đó

Bạn bè đề xuất?

+0

tôi nghĩ khi bạn tạo hoặc thay đổi tên cột ant bị lỗi, vì vậy hãy gỡ cài đặt ứng dụng và cài đặt ứng dụng mới –

+0

Tôi không muốn xóa dữ liệu trước đó của mình. – Govind

Trả lời

0

Nếu bạn đã thực hiện các thay đổi như thêm cột vào đó, bạn cần phải gỡ cài đặt hoàn toàn hoặc nâng cấp phiên bản cơ sở dữ liệu.

Dù bằng cách nào, bạn sẽ mất tất cả dữ liệu trong bảng trừ khi bạn thực hiện một bản sao lưu các dữ liệu đầu tiên bằng cách làm cho một cơ sở dữ liệu tạm thời để lưu trữ nó trong

+0

bạn có thể cho tôi biết cách tăng phiên bản cơ sở dữ liệu không? – Govind

+0

đăng một số mã để chúng tôi có thể giúp thêm – tyczj

+1

Thực ra tôi không tạo cơ sở dữ liệu thông qua mã. Tôi chỉ đang kết nối với db mà tôi đã tạo bằng trình duyệt Sqlite. Và kết nối trong mã bằng cách sử dụng db = này.openOrCreateDatabase (DB_NAME, MODE_PRIVATE, null); Chuỗi selectQuery = "SELECT COUNT (*) FROM" + TABLE_TRIP; Cursor c = db.rawQuery (selectQuery, null); – Govind

2

Tăng số phiên bản cơ sở dữ liệu của bạn bằng cách 1 khi bạn thay đổi cấu trúc cơ sở dữ liệu. (tức là thêm cột mới, loại bỏ cột đã tồn tại, thay đổi kiểu dữ liệu của cột, thay đổi tên cột, v.v ...).

Và đặt bên dưới hai dòng bên trong phương thức onUpgrade() của lớp trình trợ giúp db của bạn.

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

Mỗi lần kiểm tra số phiên bản hiện tại của cơ sở dữ liệu. Nếu nó tìm thấy bất kỳ sự không khớp nào giữa phiên bản cơ sở dữ liệu hiện tại và phiên bản cũ hơn thì nó chỉ thực hiện phương thức onUpgrade() để nâng cấp cơ sở dữ liệu. Vì vậy, chúng tôi thả tất cả các bảng của chúng tôi (s) và tạo ra một bảng mới (s) một lần nữa. Vì vậy, bây giờ bạn có thể thêm/xóa 'n' số cột trong khi làm việc với db. Tất cả những gì bạn phải làm chỉ là tăng số phiên bản lên 1 và thực thi khi bạn thay đổi cấu trúc db.

+0

Bằng cách này tôi sẽ mất dữ liệu lưu trữ trước đây của tôi. – Govind

+0

Có. Bạn sẽ mất dữ liệu trước đó. Tôi không nghĩ rằng mất dữ liệu trước đó trong khi phát triển các ứng dụng là một vấn đề lớn. – Santhosh

+1

Trên thực tế, ứng dụng của tôi đã sẵn sàng khởi chạy .. sau khi khởi chạy nếu tôi cần thay đổi cơ sở dữ liệu của mình thì vấn đề của nó là – Govind

2

Khi bạn tạo một cơ sở dữ liệu có thể bạn sẽ sử dụng một nếu những contructors:

public TimePointsSQLiteHelper(Context context, String name, 
          CursorFactory factory, int version) { 
    super(context, dbName, factory, dbVersion); 
} 

private TimePointsSQLiteHelper(Context context) { 
    super(context, dbName, null, dbVersion); 
} 

Như bạn thấy, có một biến dbVersion, đây là một trong những nơi bạn cho biết phiên bản của cơ sở dữ liệu để tránh vấn đề bạn đang gặp phải. Theo đề xuất, hãy sử dụng biến static int cuối cùng cho phiên bản/số cơ sở dữ liệu cũ của bạn để bạn có thể thay đổi dễ dàng. ví dụ .:

public final static int dbVersion = 1; 

Sau đó, bạn nên overrite onUpgrade(...) và/hoặc onDowngrade(...) để áp dụng những thay đổi để ứng dụng và dữ liệu hiện tại của bạn.

Cách đơn giản nhất và nhanh nhất để làm điều đó là một @SANTHOSH đề cập, chỉ cần thả tất cả các bảng và tạo cho họ một lần nữa:

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

xét rằng với giải pháp này bạn sẽ mất dữ liệu hiện tại của bạn lưu trong cơ sở dữ liệu của bạn. Bạn nên thêm nhiều logic hơn vào onUpgradeonDowngrade để di chuyển dữ liệu từ một phiên bản của cơ sở dữ liệu sang cơ sở dữ liệu khác nếu bạn muốn giữ nó.

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