sql >> データベース >  >> RDS >> SQLite

最初の実行時にsqliteデータベースをロードできません

    データベースは実際に正常にコピーおよびロード(オープン)されており、コピーされたデータベースにDictionary1という名前のテーブルがないという問題があると思います。 次のことを試みるとき:-

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

    at com.elytelabs.myapplication.MainActivity.fetchData(MainActivity.java:142)による

    したがって、コピーされたデータベースのテーブルに一致するようにテーブル名を修正する必要があります。 。

    このQ&Aを利用して、データベース情報を表示することをお勧めします。

    メッセージ:-

    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 .........
    

    checkDatabaseの結果 メソッドは、アセットからコピーされていないため、データベースがその時点で見つからなかったために呼び出されます(必要に応じて)。

    このメソッドはgetReadableDatabaseを使用します データベースが存在するかどうかを確認するメソッド。このメソッドは常にスタックトレースを出力します。

    別のアプローチは、置き換えることです:-

        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;
        }
    

    と:-

        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;
        }
    

    これは、データベースファイルが存在するかどうかを確認しようとします(また、パスに存在しないディレクトリを作成します。たとえば、状況によっては、データベースディレクトリが存在しない場合があります)。

    上記を使用すると、メッセージは次のようになります:-

    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. SQLPLUSを使用してCSV形式のファイルにスプールするにはどうすればよいですか?

    2. 新しい行に対してのみ、デフォルトのNOW()でタイムスタンプ列を追加します

    3. PostgreSQLの間隔値「2日」を連結する方法

    4. スキーマパターン検索からデータクラスへの関連付け