SQlite: не удалось открыть базу данных - каталог существует - PullRequest
0 голосов
/ 18 октября 2018

Добрый день!

У меня проблемы с внедрением базы данных в мое приложение.Проблема, которая сбивает меня с толку, заключается в том, что я импортировал базу данных с именем itemsDB, которая работала для меня.Если я использую любую другую базу данных (давайте поговорим о myDB.db ), у меня возникнет проблема с несуществующим каталогом.

Кажется, что у многих есть такая проблема, но я проверяю, существует ли БД в Проводнике файлов Advice, и это:

myDB.db is existant in the phone directory

Таким образом, это исключает большинство проблем, рассмотренных в других постах.

Поэтому я сказал, что все работает с itemDB , это означает, что если я использую:

private static String DB_Name = "itemsDB.db";
private String DB_table = "Items_neu";

все работает.

Если я захочу использовать свой новый банк данных «myDB.db», я не найду свой новый ресурс на устройстве.Я проверил:

Cursor check;
    check = db.rawQuery("SELECT name FROM sqlite_master WHERE type='table'", null);
    if (check.moveToFirst()) {
        while ( !check.isAfterLast() ) {
            Toast.makeText(mContext,  "Table Name=> "+check.getString(0), Toast.LENGTH_LONG).show();
            Log.e("table name:", check.getString(0));
            check.moveToNext();
        }
    }

Что дает только "android_metadata" в качестве единственной таблицы.Для myItem.db я нахожу правильную таблицу, которая Item_neu также.

Давайте проанализируем мой код сейчас, пожалуйста:

public class DBHelper extends SQLiteOpenHelper {
    private static String DB_Path ="";

    private static String DB_Name = "myDB.db";
//    private static String DB_Name = "itemsDB.db";
    private String DB_table = "tableItems";
//    private String DB_table = "Items_neu";

    private SQLiteDatabase mDataBase;


    private Context mContext = null;

    public DBHelper(Context context) {
        super(context, DB_Name, null, 1);
        DB_Path = "/data/data/"+ context.getPackageName()+"/databases/";
        this.mContext = context;
    }

Я отредактировал свой метод checkDataBase, который вы можете найти в конце поста.

The logchat gives me the following errors: (updated)
2018-10-19 16:32:56.437 1053-1053/com.example.chris.projectartifact E/Does DB exsist?:: Yes it does indeed exsits Christian!!!
2018-10-19 16:32:58.157 1053-1053/com.example.chris.projectartifact E/table name:: android_metadata
2018-10-19 16:32:58.158 1053-1053/com.example.chris.projectartifact E/SQLiteLog: (1) 
2018-10-19 16:32:58.161 1053-1053/com.example.chris.projectartifact E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.chris.projectartifact, PID: 1053
    android.database.sqlite.SQLiteException: no such table: tableItems (Sqlite code 1): , while compiling: SELECT * FROM tableItems, (OS error - 2:No such file or directory)
        at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
        at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:925)
        at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:536)
        at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:603)
        at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:63)
        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:1397)
        at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1331)
        at com.example.chris.projectartifact.DBHelper.getAllItems(DBHelper.java:181)
        at com.example.chris.projectartifact.bb_Items.itemActivity$2.onClick(itemActivity.java:126)
        at android.view.View.performClick(View.java:6291)
        at android.widget.CompoundButton.performClick(CompoundButton.java:135)
        at android.view.View$PerformClick.run(View.java:24931)
        at android.os.Handler.handleCallback(Handler.java:808)
        at android.os.Handler.dispatchMessage(Handler.java:101)
        at android.os.Looper.loop(Looper.java:166)
        at android.app.ActivityThread.main(ActivityThread.java:7425)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)
2018-10-19 16:32:58.761 2862-2862/com.example.chris.projectartifact E/MemoryLeakMonitorManager: MemoryLeakMonitor.jar is not exist!
2018-10-19 16:32:58.764 2862-2862/com.example.chris.projectartifact E/Minikin: Could not get cmap table size!

Подводя итог:

  • Я не могу редактировать новые базы данных в моем приложении
  • Каждая новая база данных выдает ошибку, что она не является существующим каталогом

Если по каким-то причинам некоторые из них могут помочь мне с моимБорьба, я был бы очень рад этому.

Редактировать: Вот некоторый прогресс, который я сделал сам.Я отредактировал новый CheckDataBase, который выдает, что база данных существует, и она просто не может найти таблицу

private boolean checkDataBase_new() {
        File databasePath = mContext.getDatabasePath(DB_Name);
        if(databasePath.exists()){
            Log.e("Does DB exsist?:","Yes it does indeed exsits Christian!!!");
        }else{
            Log.e("Does DB exsist?:","No that is causing the issue!");
        }
        /* Thoughts: So the DB Path for myDB exists, and we can find it. But there is just no readable table! */
        return databasePath.exists();
    }

С наилучшими пожеланиями CG

1 Ответ

0 голосов
/ 19 октября 2018

Хорошо, через несколько часов я наконец узнал, что вызвало мою проблему!

При копировании базы данных в папке Assets переименовывается в DB, ​​что, по-видимому, привело к большому количеству проблем.

Так что, мальчики, не переименовывайте ваши БД при копировании их в папку ресурсов!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...