Вход в Android с базой данных SQLite не работает правильно - PullRequest
0 голосов
/ 08 февраля 2019

Я создаю страницу входа с SQLite, но она работает неправильно.Всякий раз, когда я запускаю свой проект, он не показывает никакой ошибки и успешно устанавливает apk, но часть запроса показывает ошибки в обоих запросах, и я не могу найти какую-либо ошибку в моих запросах.Я публикую класс помощника БД.пожалуйста, кто-нибудь направит меня, чтобы я мог найти ошибку и исправить ее.

    package com.example.u.database;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import com.example.u.entities.Accounts;

public class AccountsDB extends SQLiteOpenHelper {

    private static String dbName= "accountDB";
    private static String tableName= "account";
    private static String idColumn= "id";
    private static String usernameColumn= "username";
    private static String passwordColumn= "password";
    private static String fullameColumn= "fullname";
    private static String emailColumn= "email";

    public AccountsDB(Context context){
        super(context, dbName, null, 1);

    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table" + tableName + "(" +
                idColumn + "integer primary key autoincrement," +
                usernameColumn + "text, " +
                passwordColumn + "text, " +
                fullameColumn + "text," +
                emailColumn + "text" +
                ")" );
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        onCreate(db);
    }

    public boolean create(Accounts accounts){
        boolean result= true;
        try {
            SQLiteDatabase sqLiteDatabase = getWritableDatabase();
            ContentValues contentValues= new ContentValues();
            contentValues.put(usernameColumn, accounts.getUsername());
            contentValues.put(passwordColumn, accounts.getPassword());
            contentValues.put(fullameColumn, accounts.getFullname());
            contentValues.put(emailColumn, accounts.getEmail());
            result= sqLiteDatabase.insert(tableName, null, contentValues) > 0;

        }catch (Exception e){
            result= false;
        }
        return result;
    }
    public static Accounts login(String username, String password){
        Accounts accounts= null;
        try {
            SQLiteDatabase sqLiteDatabase= getReadableDatabase();
            Cursor cursor= sqLiteDatabase.rawQuery("select * from" + tableName +
                    "where username= ? and password = ?", new String[] {username, password});
            if (cursor.moveToFirst()){
                accounts= new Accounts();
                accounts.setId(cursor.getInt(0));
                accounts.setUsername(cursor.getString(1));
                accounts.setPassword(cursor.getString(2));
                accounts.setFullname(cursor.getString(3));
                accounts.setEmail(cursor.getString(4));
            }

        }catch (Exception e){
            accounts = null;
        }
        return accounts;
    }
    public Accounts checkUsername (String username){
        Accounts accounts= null;
        try {
            SQLiteDatabase sqLiteDatabase= getReadableDatabase();
            Cursor cursor= sqLiteDatabase.rawQuery("select * from" + tableName +
                    "where username= ?", new String[] {username});
            if (cursor.moveToFirst()){
                accounts= new Accounts();
                accounts.setId(cursor.getInt(0));
                accounts.setUsername(cursor.getString(1));
                accounts.setPassword(cursor.getString(2));
                accounts.setFullname(cursor.getString(3));
                accounts.setEmail(cursor.getString(4));
            }

        }catch (Exception e){
            accounts = null;
        }
        return accounts;
    }
}

Пожалуйста, помогите мне найти ошибку в моем коде, чтобы я смог завершить свой проект

1 Ответ

0 голосов
/ 08 февраля 2019

Вы пропустили пробелы после идентификаторов (имен таблиц и столбцов), попробуйте следующее: -

db.execSQL("create table " + tableName + "(" +
                idColumn + " integer primary key," +
                usernameColumn + " text, " +
                passwordColumn + " text, " +
                fullameColumn + " text," +
                emailColumn + " text" +
                ")" );
  • Обратите внимание, ключевое слово автоинкремента удалено, скорее всего, оно вам не нужно. см. SQLite Autoincrement , который включает в себя: -

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

После внесения изменений вам придется удалить данные приложения или удалить приложение.

  • поскольку база данных существует, хотя и пустая с вашей точки зрения, метод onCreate не будет запускаться
  • обратите внимание, что ваш onUpgrade завершится неудачей, если будет использоваться в качестве вызова onCreate будет пытаться воссоздать таблицы, которые уже существуют (вам, вероятно, нужно DROP таблицы, а затем вызвать onCreate )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...