SQlite null数据库

时间:2018-01-05 03:54:32

标签: java database sqlite android-studio null

我正在构建一个简单的银行应用程序(没有任何安全性)并且有一个登录活动,用SQLite数据库验证输入。如果是匹配,我的方法返回1,否则返回0。问题是它始终返回0,因为根据调试数据库为空。我不确定为什么我在login方法中使用的变量为null。我使用SQLite浏览器检查了数据插页。

这是SQLite数据库,底部是login()方法:

public class CustomerDatabase{



private SQLiteDatabase database;
private SQLiteOpenHelper openHelper;

//Database constants
public static final String DB_Name = "customers.db";
public static final int DB_Version = 1;

public static final String CUSTOMER_TABLE = "Customers";

public static final String CARD_ACCESS_NO = "accessNo";
public static final int CARD_ACCESS_NO_COLUMN = 0;

public static final String CUSTOMER_PASSWORD = "password";
public static final int CUSTOMER_PASSWORD_COLUMN = 2;

public static final String CUSTOMER_NAME = "custName";
public static final int CUSTOMER_NAME_COLUMN = 1;

public static final String CHECKING_ACCOUNT_FUNDS = "checkAccFunds";
public static final int CHECKING_ACCOUNT_FUNDS_COLUMN = 3;

public static final String SAVINGS_ACCOUNT_FUNDS = "saveAccFunds";
public static final int SAVINGS_ACCOUNT_FUNDS_COLUMN = 4;

public static final String CHECKING_ACCOUNT_NO = "checkAccNo";
public static final int CHECKING_ACCOUNT_NO_COLUMN = 5;

public static final String SAVINGS_ACCOUNT_NO = "saveAccNo";
public static final int SAVINGS_ACCOUNT_NO_COLUMN = 6;

//DDL for creating the db
public static final String CREATE_CUSTOMER_TABLE =
        "CREATE TABLE " + CUSTOMER_TABLE + " (" +
                CARD_ACCESS_NO + " INTEGER PRIMARY KEY, " +
                CUSTOMER_NAME + " TEXT, " +
                CHECKING_ACCOUNT_NO + " TEXT, " +
                CUSTOMER_PASSWORD + " TEXT, " +
                CHECKING_ACCOUNT_FUNDS + " TEXT, " +
                SAVINGS_ACCOUNT_NO + " TEXT, " +
                SAVINGS_ACCOUNT_FUNDS + " TEXT)";


public CustomerDatabase(Context context){
    openHelper = new DBHelper(context, DB_Name, DB_Version);
}

//method to store accountHolder objects into the database
public AccountHolder saveAccHolder(AccountHolder holder){
    database = openHelper.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(CARD_ACCESS_NO, holder.getAccessCardNo());
    values.put(CUSTOMER_NAME, holder.getName());
    values.put(CUSTOMER_PASSWORD, holder.getPassword());
    values.put(CHECKING_ACCOUNT_FUNDS, holder.getCheckingAccountFunds());
    values.put(CHECKING_ACCOUNT_NO, holder.getCheckingAccountNo());
    values.put(SAVINGS_ACCOUNT_NO, holder.getSavingsAccountNo());
    values.put(SAVINGS_ACCOUNT_FUNDS, holder.getSavingsAccountFunds());

    long id = database.insert(CUSTOMER_TABLE, null, values);

    holder.setDbId(id);

    database.close();

    return holder;
}

private static class DBHelper extends SQLiteOpenHelper{

    public DBHelper(Context context, String name, int version){
        super(context, name, null, version);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {

        db.execSQL("DROP TABLE IF EXISTS " + CUSTOMER_TABLE);
        db.execSQL(CREATE_CUSTOMER_TABLE);

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVer, int newVer) {

        db.execSQL("DROP TABLE IF EXISTS " + CUSTOMER_TABLE);
        onCreate(db);

    }
}

/**Method will be used by the bank to check if user is authorized */
public int login(String accessNo, String password){
    String[] selectArgs = new String[]{accessNo,password};

    try{
        int i = 0;
        Cursor cursor = null;
        cursor = database.rawQuery("SELECT * FROM CUSTOMER_TABLE WHERE accessNo =? AND password=?",selectArgs);
        cursor.moveToFirst();
        i = cursor.getCount();
        cursor.close();
        return i;
    }
    catch (Exception e){ e.printStackTrace();}

    return 0;
}

}

Debug表示数据库变量在login()处于行光标= database.rawQuery()...时为空

以下是登录活动逻辑:

btnLogin.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if(edtAccessCardNo.length() != 0 || edtPassword.length() != 0){
                String accessNoInput = edtAccessCardNo.getText().toString();
                String passwordInput = edtPassword.getText().toString();

                boolean checkVerify = isVerifiedUser(accessNoInput, passwordInput);

                if(checkVerify){
                    Intent intent = new Intent(getApplicationContext(), BankActivity.class);
                    startActivity(intent);
                }else{
                    txtErrorDisplay.setText("Unable to login.");
                }
            }else{
                edtAccessCardNo.setHint("This is a required field");
                edtPassword.setHint("This is a required field");
            }
        }
    });

}

//Method to create dummy accountHolder objects
public void getAndSaveDummyHolders(){
    CustomerDatabase custDb = new CustomerDatabase(this);

    for(int i = 0; i < 5; i++){
        AccountHolder holder = new AccountHolder(
                holderNames[i], accessNo[i],
                passwords[i], checkAccNo[i], savAccNo[i],
                checkAccFunds[i], savAccFunds[i]);

        custDb.saveAccHolder(holder);
    }


}

//verify the user using method in customer database
public boolean isVerifiedUser(String userAccessCard, String userPassword){
    CustomerDatabase custDb = new CustomerDatabase(getApplicationContext());

    int check = custDb.login(userAccessCard, userPassword);

    if(check == 1){
        return true;
    }else{
        return false;
    }
}

0 个答案:

没有答案