Как я могу использовать функцию SQLite SUM ()? - PullRequest
0 голосов
/ 05 ноября 2018

*

Моя проблема

Недавно я запустил часть своего Java-кода [Open Helper] через android studio, и он выдал следующую ошибку: У меня есть страница входа в систему с android (java-код), и только моя проблема, когда время, которое должно быть паролем, просто введенная строка, будет истинным. но если был поставлен числовой пароль, не будет истиной. код SqlOpenHelper

package com.example.root.sql2;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.support.annotation.Nullable;
public class db extends SQLiteOpenHelper {
    public db(Context context) {
        super(context, "login.db", null, 1);
    }
    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        sqLiteDatabase.execSQL("CREATE TABLE USER(ID INTEGER PRIMARY KEY AUTOINCREMENT ,NAME TEXT, PASSWORD TEXT)");
    }
    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
        sqLiteDatabase.execSQL("DROP TABLE IF EXISTS USER");
        onCreate(sqLiteDatabase);
    }
    public boolean insert (String name , String password){
        SQLiteDatabase db = getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put("NAME", name);
        contentValues.put("PASSWORD", password);
        long ins = db.insert("USER","",contentValues);
        if (ins == -1) return false;
        else return true;
    }
    public boolean login(String name , String password){
        SQLiteDatabase db = getReadableDatabase();
        Cursor cursor = db.rawQuery("SELECT * FROM USER WHERE NAME=? AND PASSWORD=?", new String[] {name , password});
        cursor.moveToFirst();
        if (cursor.getCount()>0) return false;
        else return true;
    }
}

«пароль», если была строка, пароль тогда истинно, но «пароль», если была строка, пароль (числовой) тогда не будет истиной ... *

1 Ответ

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

Я считаю, что ваша главная проблема в том, что ваша логика перевернута.

Вы в основном говорите, используя if (cursor.getCount()>0) return false;; если поиск пользователя обнаружил пользователя, верните false.

Я верю, что вы хотите if (cursor.getCount()>0) return true;

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

Я бы посоветовал вам использовать: -

public boolean login(String name , String password){
    SQLiteDatabase db = getReadableDatabase();
    Cursor cursor = db.rawQuery("SELECT * FROM USER WHERE NAME=? AND PASSWORD=?", new String[] {name , password});
    int count = cursor.getCount();
    cursor.close();
    return count > 0;
}
  • Получает счетчик, закрывает курсор и возвращает значение true, если счет превышает 0 (комбинация пароля пользователя была найдена), в противном случае - значение false;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...