Bất kỳ ai cũng có thể cho tôi biết cách cập nhật cơ sở dữ liệu trong Android. Tôi đã tạo một ứng dụng với cơ sở dữ liệu được nhúng. Tôi đã thay đổi phiên bản của cơ sở dữ liệu trong tệp kê khai và tạo phương thức cập nhật. Tôi muốn kiểm tra nó để xem cơ sở dữ liệu đã được cập nhật đúng chưa nhưng khi tôi sử dụng lệnh adb chỉ -r sẽ cho phép tôi thực hiện cài đặt lại nhưng nó giữ cơ sở dữ liệu. Có cách nào để chạy lệnh adb cho phép tôi cập nhật cơ sở dữ liệu hay không. Cảm ơn.Cập nhật cơ sở dữ liệu Android
Trả lời
Hãy nhìn vào các nguồn sau và xem họ đang hữu ích:
Delicious Bookmarks
http://delicious.com/tag/android+adb
http://delicious.com/tag/android+database
DevX: Tạo và sử dụng cơ sở dữ liệu trong Android
http://www.devx.com/wireless/Article/40842
Học Android: Lập trình cơ sở dữ liệu
http://learnandroid.blogspot.com/2008/01/android-database.html
Android Tóm tắt thông tin Cơ sở dữ liệu trọn gói
http://developer.android.com/reference/android/database/package-summary.html
gì làm việc đối với tôi là thay đổi số phiên bản dành cho các cơ sở dữ liệu. Đây là số không đổi được sử dụng bởi phương thức onCreate() của nhà cung cấp nội dung của bạn. Một cái gì đó tương tự hoạt động nếu bạn không sử dụng một nhà cung cấp nội dung cho cơ sở dữ liệu của bạn, và truy vấn nó trực tiếp. Xem ví dụ về mã nguồn here.
Bài đăng trên blog này giải thích một chút khái niệm cơ bản về cách thức nâng cấp cơ sở dữ liệu của Android - http://www.unwesen.de/2009/09/07/android-development-database-upgrades/2/ – r1k0
Điều gì làm việc cho tôi là thay đổi tham số số phiên bản mà tôi cung cấp cho lớp DBOpenHelper mở rộng SQLiteOpenHelper (lớp được sử dụng để tạo/đọc/ghi/etc ... cơ sở dữ liệu Android). Khi tham số số phiên bản được tăng lên, hàm onUpdate() được gọi một lần cho giá trị mới của tham số này.
Dưới đây là làm thế nào tôi sẽ xử lý phương pháp updateRow tôi:
public void updateRow(long rowId, String code, String name) {
ContentValues args = new ContentValues();
args.put("code", code);
args.put("name", name);
db.update(DATABASE_TABLE, args, "_id=" + rowId, null);
}
Có cách nào để thực hiện việc này không cho nhiều hàng cùng lúc, thay vì gọi 'update' cho mỗi hàng? – Gaffi
Nếu bằng cách cập nhật bạn có nghĩa là xây dựng lại (như tôi làm trong phát triển khi tôi muốn bắt đầu với một cơ sở dữ liệu tươi mỗi khi ứng dụng của tôi bắt đầu) sau đó thêm mã này trước khi truy cập vào cơ sở dữ liệu trong ứng dụng của bạn:
this.getContext().getApplicationContext().deleteDatabase(DATABASENAME);
HOẶC
Find t ông đường dẫn đến cơ sở dữ liệu của bạn:
SQLiteHelper sql_database_helper = new SQLiteHelper(this.getContext().getApplicationContext());
File dbFile = getDatabasePath(DATABASENAME);
Log.v("XIX","DB FILE PATH:"+dbFile.getAbsolutePath());
Sau đó, xóa cơ sở dữ liệu của bạn từ dấu nhắc lệnh:
> adb devices
List of devices attached
3246%$%^$&17 device
> adb shell
$ su
su
rm mydatapath
Chú ý: Bạn có thể không thể truy cập vào lệnh su
mà không nứt điện thoại của bạn
Giải thích : Nếu bạn không muốn làm theo lời khuyên của r1k0 (đó có thể là cách thích hợp để thực hiện nếu bạn đang nâng cấp một ứng dụng đã phát hành) thì bạn có thể xóa cơ sở dữ liệu bằng các lệnh adb và restar t ứng dụng của bạn sẽ gọi lại phương thức onCreate.
Tôi không khuyên để sử dụng theo cách này:
public void updateRow(long rowId, String code, String name) {
ContentValues args = new ContentValues();
args.put("code", code);
args.put("name", name);
db.update(DATABASE_TABLE, args, "_id=" + rowId, null);
}
ứng dụng của bạn sẽ được dễ bị tấn công sql injection, cách tốt nhất để làm điều đó là một cái gì đó như thế này:
public void updateRow(long rowId, String code, String name) {
ContentValues args = new ContentValues();
args.put("code", code);
args.put("name", name);
String whereArgs[] = new String[1];
whereArgs[0] = "" + rowId;
db.update(DATABASE_TABLE, args, "_id= ?", whereArgs);
}
- 1. Cập nhật mô hình từ cơ sở dữ liệu (Cơ sở dữ liệu đầu tiên)
- 2. Cơ sở dữ liệu đích không được cập nhật
- 3. Cập nhật lược đồ cơ sở dữ liệu
- 4. Cập nhật lược đồ cơ sở dữ liệu với hibernate
- 5. Cập nhật trường bit sql trong cơ sở dữ liệu
- 6. heroku không cập nhật lược đồ cơ sở dữ liệu
- 7. Cập nhật cơ sở dữ liệu trên __destruct()?
- 8. Cập nhật các phiên bản cơ sở dữ liệu sqlite?
- 9. khay thông báo cập nhật cơ sở dữ liệu
- 10. Chạy cơ sở dữ liệu cập nhật từ Team City
- 11. System.Resources.MissingManifestResourceException khi cập nhật cơ sở dữ liệu
- 12. lỗi cập nhật cơ sở dữ liệu - Gói NuGet (EntityFramework.SqlMigrations)
- 13. cập nhật cơ sở dữ liệu sql với ContentValues và phương thức cập nhật
- 14. Cập nhật bảng cơ sở dữ liệu từ một bảng cơ sở dữ liệu SQL Server sang bảng cơ sở dữ liệu SQL Server khác?
- 15. Android SimpleCursorAdapter không cập nhật khi thay đổi cơ sở dữ liệu
- 16. Chiến lược cập nhật ứng dụng Android (với cơ sở dữ liệu)
- 17. Cơ sở dữ liệu và bản cập nhật ứng dụng Android SQLite
- 18. Android cách cập nhật, nhưng giữ lại thông tin cơ sở dữ liệu
- 19. Entitiy Framework: "Cập nhật cơ sở dữ liệu từ Model" thay vì "Tạo cơ sở dữ liệu từ Model"
- 20. Cập nhật lược đồ cơ sở dữ liệu mà không làm rơi dữ liệu?
- 21. Lặp qua cơ sở dữ liệu trên máy chủ và cập nhật dữ liệu
- 22. Trường cập nhật với dữ liệu từ cơ sở dữ liệu khác
- 23. Cách thay thế tệp cơ sở dữ liệu sqlite hiện có bằng tệp cơ sở dữ liệu mới trong android
- 24. Truy cập cơ sở dữ liệu SQLite từ dòng lệnh
- 25. Tệp nhật ký cho cơ sở dữ liệu đầy đủ
- 26. Android đổi tên Cơ sở dữ liệu SQLite
- 27. Cơ sở dữ liệu Flushing và SQLite trên android
- 28. Không thể cập nhật cơ sở dữ liệu bằng EF Migrations sau khi cập nhật lên EF 6.0.0-alpha
- 29. Truy cập cơ sở dữ liệu dụng cụ
- 30. giữ bảng nhật ký trong cơ sở dữ liệu sqlite?
cảm ơn các liên kết nhưng tôi không thấy bất cứ điều gì nói về việc cài đặt lại adb và cập nhật cơ sở dữ liệu. Là nó có thể làm điều này, ứng dụng của tôi tạo ra rằng cơ sở dữ liệu tốt lần đầu tiên nhưng chỉ trong các bản cập nhật là khi nó bị treo. Có một mục kê khai tôi cần phải nhập không? – user237259
không bao giờ nhớ tôi phát hiện ra những gì tôi đã làm sai, sau khi một số nghiên cứu tôi phát hiện ra rằng tôi đã không thả bảng một cách chính xác và khi tôi sẽ tạo lại bảng nó sẽ lỗi ra. Tôi đã kết thúc thả bảng một cách chính xác và thay vì gọi lệnh oncreate tôi vừa viết một truy vấn để tạo lại bảng trong phương thức onupdate. – user237259
Tôi nghĩ rằng nó sẽ mang tính xây dựng hơn nếu bạn cung cấp các ví dụ thay vì một loạt các liên kết (không liên quan). –