Не удается найти базу данных в браузере DB SQLite?

#android #database #sqlite

#java #Android #База данных #sqlite #android-sqlite

Вопрос:

Я новичок и создаю базу данных регистрации для школьного проекта, когда я захожу в браузер DB для SQLite и открываю свой файл, там нет таблиц или содержимого? Будет ли это как-то связано с моим использованием onCreate или onUpgrade? Я провел много исследований, но результаты, которые я получаю, всегда были очень давними, и я действительно их не понимаю. Когда я ввожу информацию в свой эмулятор, я также получаю код ошибки ‘SQLiteException: нет такой таблицы’. Я действительно не уверен, что делать с моим кодом.

 package android.example.rise;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.nfc.Tag;
import android.text.Html;
import android.util.Log;

public class DatabaseHelper extends SQLiteOpenHelper {
    public static final String DATABASE_NAME="register.db";
    public static final String TABLE_NAME="register.db";
    public static final String COL_1="ID";
    public static final String COL_2="first";
    public static final String COL_3="second";
    public static final String COL_4="last";
    public static final String COL_5="email";
    public static final String COL_6="password";

    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        sqLiteDatabase.execSQL("CREATE TABLE registeruser (ID INTEGER PRIMARY KEY AUTOINCREMENT, first TEXT, second TEXT, last TEXT, email TEXT, password TEXT)");
    }

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

    }

    public long addUser(String first, String middle, String last, String user, String password) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put("first", first);
        contentValues.put("second", middle);
        contentValues.put("last", last);
        contentValues.put("email", user);
        contentValues.put("password", password);
        long res = db.insert("registeruser", null, contentValues);
        return res;

    }

    public boolean checkUser(String email, String password){
        String[] column = {COL_1};
        SQLiteDatabase db = getReadableDatabase();
        String selection = COL_5   "=?"   " and "   COL_6   "=?";
        String[] selectionArgs = { email, password } ;
        Cursor cursor = db.query(TABLE_NAME,column,selection,selectionArgs,null,null,null);
        int count = cursor.getCount();
        cursor.close();
        db.close();

        if(count>0)
            return true;
        else
            return false;
    }

}
 

Ответ №1:

В этой строке:

 public static final String TABLE_NAME="register.db";
 

Я предполагаю, что по ошибке вы определяете имя таблицы так же, как имя базы данных,
хотя в CREATE инструкции:

 sqLiteDatabase.execSQL("CREATE TABLE registeruser (.....)");
 

вы создаете таблицу с именем registeruser .
Позже в вашем коде вы всегда используете переменную TABLE_NAME , отличную от созданной таблицы.
Кроме того, поскольку вы определили переменные для имен таблицы и столбцов, не кодируйте их повторно.
Измените объявление на:

 public static final String TABLE_NAME="registeruser";
 

и CREATE оператор для:

 sqLiteDatabase.execSQL(
    "CREATE TABLE "   TABLE_NAME   " ("   
        COL_1   " INTEGER PRIMARY KEY AUTOINCREMENT, "  
        COL_2   " TEXT, "   
        COL_3   " TEXT, "  
        COL_4   " TEXT, "  
        COL_5   " TEXT, "  
        COL_6   " TEXT)"
);
 

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