SQLite-запрос не создает таблицу;ошибок нет - PullRequest
0 голосов
/ 14 ноября 2018

Я пытаюсь создать таблицу с использованием SQLite, но запрос Create Table, похоже, не работает. Когда я открываю файл .db в онлайн-приложении просмотра, в нем нет данных / таблицы (прилагается). Я не получаю никаких ошибок при отладке; проблема. Я удаляю старые файлы .db и проверяю, запущен ли код onCreate.

https://wsi.li/OzOSD2tTsB1qua/

Код помощника базы данных ниже:

package com.example.lewis.food;

import android.content.Context;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DatabaseHelper extends SQLiteOpenHelper {
    public static final String DATABASE_NAME = "Food.db";
    public static final String TABLE_NAME = "food_table";
    public static final String ID = "ID";
    public static final String DESCRIPTION = "DESCRIPTION";
    public static final String INGREDIENTS = "INGREDIENTS";
    public static final String METHOD = "METHOD";
    public static final String NOTES = "NOTES";

    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, 1);
        try {
            SQLiteDatabase db = this.getWritableDatabase();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(" CREATE TABLE " + TABLE_NAME + " (" +
                        ID + " TEXT PRIMARY KEY, " +
                        DESCRIPTION + " TEXT, " +
                        INGREDIENTS + " TEXT, " +
                        METHOD + " TEXT, " +
                        NOTES + " TEXT NOT NULL);"
        );

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
        onCreate(db);
    }
}

1 Ответ

0 голосов
/ 14 ноября 2018

Выпуск 1.

Метод onUpgrade является частью метода onCreate, чтобы переместить его за пределы метода onCreate.Например: -

public class DatabaseHelper extends SQLiteOpenHelper {
    public static final String DATABASE_NAME = "Food.db";
    public static final String TABLE_NAME = "food_table";
    public static final String ID = "ID";
    public static final String DESCRIPTION = "DESCRIPTION";
    public static final String INGREDIENTS = "INGREDIENTS";
    public static final String METHOD = "METHOD";
    public static final String NOTES = "NOTES";

    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, 1);
        try {
            SQLiteDatabase db = this.getWritableDatabase();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(" CREATE TABLE " + TABLE_NAME + " (" +
                ID + " TEXT PRIMARY KEY, " +
                DESCRIPTION + " TEXT, " +
                INGREDIENTS + " TEXT, " +
                METHOD + " TEXT, " +
                NOTES + " TEXT NOT NULL);"
        );
    }

    @Override
    public void onUpgrade (SQLiteDatabase db,int oldVersion, int newVersion){
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
        onCreate(db);
    }
}
  • Обратите внимание, это может быть просто из-за того, что вы ввели неверный код, поскольку код, который вы показали, скорее всего, не скомпилируется.

Проблема 2.

Скорее всего, вы ищете неправильное место для базы данных / таблицы.

Следующий код в качестве активирующего действия (MainActivity, используемый в коде) подтвердит, что база данных работаетПосле создания и таблицы она также распечатает местоположение базы данных: -

public class MainActivity extends AppCompatActivity {

    DatabaseHelper mDBHlpr;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mDBHlpr = new DatabaseHelper(this);

        Cursor csr = mDBHlpr.getReadableDatabase().query("sqlite_master",null,null,null,null,null,null);
        Log.d("DBLOCATION",this.getDatabasePath(DatabaseHelper.DATABASE_NAME).getAbsolutePath());
        while (csr.moveToNext()) {
            Log.d(
                    "DBINFO",
                    "Found a " + csr.getString(csr.getColumnIndex("type")) +
                            " named " + csr.getString(csr.getColumnIndex("name"))
            );
        }
        csr.close();
    }
}

При запуске (используя только приведенный выше код) результат будет: -

11-14 00:33:23.565 1246-1246/? D/DBLOCATION: /data/data/so53291104.so53291104/databases/Food.db
11-14 00:33:23.565 1246-1246/? D/DBINFO: Found a table named android_metadata
11-14 00:33:23.565 1246-1246/? D/DBINFO: Found a table named food_table
11-14 00:33:23.565 1246-1246/? D/DBINFO: Found a index named sqlite_autoindex_food_table_1

То есть приведенный выше код создает базу данных, таблицу и индекс в столбце food (если он еще не существует), а затем записывает некоторую информацию о фактической базе данных.

  • Обратите внимание на DBLOCATIONбудет зависеть от вашего пакета и не будет соответствовать описанному выше.

  • Вы можете удалить данные приложения или удалить приложение перед запуском любого исправленного кода.

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