SQLite
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> SQLite

Không thể tải cơ sở dữ liệu sqlite trong lần chạy đầu tiên

Tôi tin rằng cơ sở dữ liệu trên thực tế đã được sao chép và tải (mở) thành công và đúng hơn là vấn đề là cơ sở dữ liệu được sao chép không có bảng có tên Dictionary1 khi thử những điều sau:-

Cursor cursor = sd.query("Dictionary1" ,null, null, null, null, null, null);

Theo at com.elytelabs.myapplication.MainActivity.fetchData(MainActivity.java:142)

Vì vậy, bạn cần sửa tên bảng theo bảng trong cơ sở dữ liệu đã sao chép .

Bạn có thể muốn sử dụng Q&A này để hiển thị thông tin cơ sở dữ liệu.

Các tin nhắn:-

11-22 23:14:56.455 13193-13193/com.elytelabs.myapplication E/SQLiteLog: (14) cannot open file at line 30052 of [b3bb660af9]
11-22 23:14:56.455 13193-13193/com.elytelabs.myapplication E/SQLiteLog: (14) os_unix.c:30052: (2) open(/data/data/com.elytelabs.myapplication/databases/dictionary.db) - 
11-22 23:14:56.455 13193-13193/com.elytelabs.myapplication E/SQLiteDatabase: Failed to open database '/data/data/com.elytelabs.myapplication/databases/dictionary.db'.
                                                                             android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database

etc .........

kết quả từ khi checkDatabase phương thức được gọi vì cơ sở dữ liệu không được tìm thấy tại thời điểm đó vì nó chưa được sao chép từ các tài sản (như nó nên làm).

Phương thức sử dụng getReadableDatabase để thử xem cơ sở dữ liệu có tồn tại hay không. Phương thức này luôn in stacktrace.

Một cách tiếp cận thay thế có thể là thay thế:-

    private boolean checkDataBase(){
     //  this.getReadableDatabase();
        SQLiteDatabase checkDB = null;
        try{
            String myPath = DB_PATH ;
            checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
        }catch(SQLiteException e){
            //database does't exist yet.
        }
        if(checkDB != null){

            checkDB.close();
        }
        return checkDB != null ? true : false;
    }

với:-

    private boolean checkDataBase(){
        File db = new File(DB_PATH);
        if(db.exists()) return true;
        File dir = new File(db.getParent());
        if (!dir.exists()) {
            dir.mkdirs();
        }
        return false;
    }

Điều này cố gắng xem liệu tệp cơ sở dữ liệu có tồn tại hay không (và cũng tạo ra một thư mục không tồn tại trong đường dẫn, ví dụ:trong một số trường hợp, thư mục cơ sở dữ liệu có thể không tồn tại.)

Nếu những điều trên được sử dụng thì tin nhắn của bạn sẽ giống như sau:-

11-22 23:14:56.525 13193-13193/com.elytelabs.myapplication E/SQLiteLog: (1) no such table: Dictionary1
11-22 23:14:56.525 13193-13193/com.elytelabs.myapplication D/AndroidRuntime: Shutting down VM
11-22 23:14:56.525 13193-13193/com.elytelabs.myapplication E/AndroidRuntime: FATAL EXCEPTION: main
                                                                             Process: com.elytelabs.myapplication, PID: 13193
                                                                             java.lang.RuntimeException: Unable to start activity ComponentInfo{com.elytelabs.myapplication/com.elytelabs.myapplication.MainActivity}: android.database.sqlite.SQLiteException: no such table: Dictionary1 (code 1): , while compiling: SELECT * FROM Dictionary1
                                                                                 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2342)
                                                                                 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2404)
                                                                                 at android.app.ActivityThread.access$900(ActivityThread.java:154)
                                                                                 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1315)
                                                                                 at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                 at android.os.Looper.loop(Looper.java:135)
                                                                                 at android.app.ActivityThread.main(ActivityThread.java:5296)
                                                                                 at java.lang.reflect.Method.invoke(Native Method)
                                                                                 at java.lang.reflect.Method.invoke(Method.java:372)
                                                                                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)
                                                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:707)
                                                                              Caused by: android.database.sqlite.SQLiteException: no such table: Dictionary1 (code 1): , while compiling: SELECT * FROM Dictionary1
                                                                                 at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
                                                                                 at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
                                                                                 at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
                                                                                 at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
                                                                                 at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
                                                                                 at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
                                                                                 at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
                                                                                 at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1316)
                                                                                 at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1163)
                                                                                 at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1034)
                                                                                 at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1202)
                                                                                 at com.elytelabs.myapplication.MainActivity.fetchData(MainActivity.java:142)
                                                                                 at com.elytelabs.myapplication.MainActivity.onCreate(MainActivity.java:82)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Id hàng sqlite không khớp với listview - ANDROID

  2. Khi nào tôi nên đóng con trỏ và db?

  3. Cho phép người dùng chỉ truy cập vào một số bảng nhất định trong nhà cung cấp nội dung của tôi

  4. Cách định dạng kết quả truy vấn SQLite trong chế độ TCL

  5. Cách hoạt động của toán tử LIKE trong SQLite