Android的登录与数据库SQLite的工作不正常

问题描述 投票:0回答:1

我创建使用SQLite一个登录页面,但它不能正常工作。每当我跑我的项目不显示任何错误,并成功安装APK,但查询部分两者均显示查询错误,我无法找到任何类型的错误在我的查询。我张贴DB辅助类。请人指导我,这样我可以能够找到错误并解决它。

    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;
    }
}

请帮我在我的代码中找到错误,所以我能完成我的项目

database sqlite login
1个回答
0
投票

你已经标识符(表和列名)后省略空间尝试以下方法: -

db.execSQL("create table " + tableName + "(" +
                idColumn + " integer primary key," +
                usernameColumn + " text, " +
                passwordColumn + " text, " +
                fullameColumn + " text," +
                emailColumn + " text" +
                ")" );
  • 注意自动增量的关键字已经被移除,它极有可能你并不需要它。 see SQLite Autoincrement其包括: -

AUTOINCREMENT关键字强加额外的CPU,内存,磁盘空间和磁盘I / O开销,如果不严格需要应该避免。它通常是没有必要的。

你将不得不删除该应用程序的数据或卸载应用程序,进行更改后。

  • 作为数据库存在,尽管从你的角度看空,onCreate方法将无法运行
  • 注意如果作为调用的onCreate将尝试重建已经存在的表(你可能需要删除的表,然后调用的onCreate)您onUpgrade会失败
© www.soinside.com 2019 - 2024. All rights reserved.