Создание базы данных Android Studio SQLite не работает?

Я не опытный пользователь, когда дело касается программирования на Android Studio и / или Java. Я работаю над проектом, для которого приложением требуется база данных SQLite.

Следуя некоторым руководствам, я создал класс Java, чтобы локально управлять очень конкретной БД, которую я буду использовать, закодированной следующим образом:

public class gestionedb {
static final String KEY_RIGAID = "_id";
static final String KEY_EMAIL = "email";
static final String KEY_PASSWORD = "password";
static final String KEY_NICKNAME = "nickname";
static final String TAG = "gestionedb";
static final String DATABASE_NOME = "superchat5db";
static final String DATABASE_TABELLA = "users";
static final int DATABASE_VERSIONE = 1;

static final String DATABASE_CREAZIONE = "create table clienti (_id integer primary key autoincrement, " + "email text not null, password text not null, nickname text not null);";

final Context context;
DatabaseHelper DBHelper;
SQLiteDatabase db;

public gestionedb(Context ctx){
    this.context = ctx;
    DBHelper = new DatabaseHelper(context);
}

private static class DatabaseHelper extends SQLiteOpenHelper {
    DatabaseHelper(Context context) {
        super(context, DATABASE_NOME, null, DATABASE_VERSIONE);
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        try {
            db.execSQL(DATABASE_CREAZIONE);
        }
        catch (SQLException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.d("Test", "in onUpgrade. Old is: " + oldVersion + " New is: " + newVersion);
    }
}

public gestionedb open() throws SQLException {
    db = DBHelper.getWritableDatabase();
    return this;
}

public void close() {
    DBHelper.close();
}

public Cursor obtainallusers() {
    return db.query(DATABASE_TABELLA, new String[] {KEY_RIGAID, KEY_EMAIL, KEY_NICKNAME}, null, null, null, null, null);
}

public Cursor obtainuser(long rigaId) throws SQLException {
    Cursor mCursore = db.query(true, DATABASE_TABELLA, new String[] {KEY_RIGAID, KEY_EMAIL, KEY_NICKNAME}, KEY_RIGAID + " = " + rigaId, null, null, null, null, null);
    if (mCursore != null) {
        mCursore.moveToFirst();
    }
    return mCursore;
}

public long adduser(String email, String password, String nickname) {
    ContentValues initialValues = new ContentValues();
    initialValues.put(KEY_EMAIL, email);
    initialValues.put(KEY_PASSWORD, password);
    initialValues.put(KEY_NICKNAME, nickname);
    return db.insert(DATABASE_TABELLA, null, initialValues);
}

public boolean deleteuser(long rigaId) {
    return db.delete(DATABASE_TABELLA, KEY_RIGAID + " = " + rigaId, null) > 0;
}

public boolean updatenickname(long rigaId, String nickname) {
    ContentValues args = new ContentValues();
    args.put(KEY_NICKNAME, nickname);
    return db.update(DATABASE_TABELLA, args, KEY_RIGAID + " = " + rigaId, null) > 0;
}

public boolean updatepsw(long rigaId, String password){
    ContentValues args = new ContentValues();
    args.put(KEY_PASSWORD, password);
    return db.update(DATABASE_TABELLA, args, KEY_RIGAID + " = " + rigaId, null) > 0;
}

}

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

Я решил протестировать все это, создав кнопку из моей MainActivity, которая запускает совершенно новую Activity под названием «ProvaDB» (TestDB), которая выполняет следующие действия:

gestionedb db = new gestionedb(this);

    db.open();
    long id = db.adduser("[email protected]", "prova123", "prova1");
    id = db.adduser("[email protected]", "prova123", "prova2");
    db.close();

    db.open();
    Cursor c = db.obtainallusers();
    if (c.moveToFirst()){
        do{
            Toast.makeText(this,
                    "id: " + c.getString(0) + "\n" +
                    "Email: " + c.getString(1) + "\n" +
                    "Nickname: " + c.getString(2),
                    Toast.LENGTH_LONG).show();
        } while (c.moveToNext());
    }
    db.close();

}

Предполагается создать БД и добавить пару пользователей, а затем перечислить их с длинным текстом тоста. Когда я пытаюсь запустить приложение, после нажатия кнопки перехода в «ProvaDB» приложение вылетает. Просматривая логи, я заметил, что БД отсутствует, что странно. Я не могу понять, что в этом плохого, так как я не опытный пользователь, как я уже упоминал ранее. Любые идеи?

Часть журнала:

2018-12-10 19:11:05.175 17701-17701/com.example.lorenzo.superchat5 E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.lorenzo.superchat5, PID: 17701
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.lorenzo.superchat5/com.example.lorenzo.superchat5.ProvaDB}: android.database.sqlite.SQLiteException: no such table: users (code 1): , while compiling: SELECT _id, email, nickname FROM users
#################################################################
Error Code : 1 (SQLITE_ERROR)
Caused By : SQL(query) error or missing database.
    (no such table: users (code 1): , while compiling: SELECT _id, email, nickname FROM users)

Большое Вам спасибо.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
0
108
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Может быть, когда вы меняли разные имена, вы забыли об этом:

DATABASE_TABELLA = "users";

измените его на:

DATABASE_TABELLA = "clienti";

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

Вы совершенно правы .. Я тупой. Большое вам спасибо. Я понимаю, что это глупый вопрос. Большое Вам спасибо.

Lorenzo G. 10.12.2018 22:32

Другие вопросы по теме