【问题标题】:android.database.sqlite.SQLiteException: no such column: user_id (code 1 SQLITE_ERROR):android.database.sqlite.SQLiteException:没有这样的列:user_id(代码 1 SQLITE_ERROR):
【发布时间】:2018-12-20 01:27:50
【问题描述】:

作为一名 Android Studio 初学者,我往往会遇到很多我找不到的小错误,请让我知道我做错了什么,因为我已经以某种方式尝试了所有其他答案,但并没有变得更好: )

public class DatabaseHelper extends SQLiteOpenHelper{

    private static final int DATABASE_VERSION = 1;

    private static final String DATABASE_NAME = "UserManager.db";

    private static final String TABLE_USER = "user";

    private static final String COLUMN_USER_ID= "user_id";
    private static final String COLUMN_USER_NAME= "user_name";
    private static final String COLUMN_USER_EMAIL= "user_email";
    private static final String COLUMN_USER_PASSWORD= "user_password";

    private String CREATE_USER_TABLE = "CREATE TABLE " + TABLE_USER + "(" + 
    COLUMN_USER_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
    + COLUMN_USER_NAME + " TEXT," + COLUMN_USER_EMAIL + " TEXT," + 
    COLUMN_USER_PASSWORD + " TEXT" + ")";

    private String DROP_USER_TABLE = " DROP TABLE IF EXISTS " + TABLE_USER;

    public DatabaseHelper(Context context){

        super(context, DATABASE_NAME,null, DATABASE_VERSION);

    }

    @Override
    public void onCreate(SQLiteDatabase db){
        db.execSQL(CREATE_USER_TABLE);
    }

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

    public void addUser(User user){
        SQLiteDatabase db= this.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(COLUMN_USER_NAME, user.getName());
        values.put(COLUMN_USER_EMAIL, user.getEmail());
        values.put(COLUMN_USER_PASSWORD, user.getPassword());


        db.insert(TABLE_USER,null, values);
        db.close();


    }

    public boolean checkUser(String password, String email){
        String[] columns = {
                COLUMN_USER_ID
        };
        SQLiteDatabase db= this.getWritableDatabase();
        String selection = COLUMN_USER_EMAIL + " = ? " + "AND "+ COLUMN_USER_PASSWORD+" =? ";
        String[] selectionArgs = { email,password };

        Cursor cursor = db.query(TABLE_USER,
                columns,
                selection,
                selectionArgs,
                null,
                null,
                null);
        int cursorCount = cursor.getCount();
        cursor.close();
        db.close();

        if(cursorCount > 0){
            return true;
        }
        return false;
     }
}

我知道 logcat 告诉我这个:

07-11 22:08:29.072 9071-9071/com.example.lavinia.sqllogin E/AndroidRuntime: 
FATAL EXCEPTION: main
Process: com.example.lavinia.sqllogin, PID: 9071
android.database.sqlite.SQLiteException: no such column: user_id (code 1 
SQLITE_ERROR): , while compiling: SELECT user_id FROM user WHERE user_email = 
?AND user_password =?

我找不到 user_id 的错误用法,我认为我使用它很好,并且我自己登录后应用程序将停止工作。 (应用程序有登录和注册活动——注册工作正常,但在 Login.activity 中按下登录按钮会导致应用程序崩溃)

非常感谢您的支持 :) 如果需要,我会提供更多代码。

【问题讨论】:

    标签: database sqlite android-studio authentication


    【解决方案1】:

    这个问题可能是由于我往往会遇到很多很多微小的错误以及对onCreate 方法的常见误解。

    onCreate 方法仅在数据库存在并且实际创建时自动运行一次。并非每次运行应用程序时都会运行。

    因此,如果在 onCreate 方法中对结构(表和列)进行编码/操作,则不会应用对结构(表和列)的任何更改(包括更正)。

    在开发时,最简单的修复方法是执行以下 3 项之一:-

    • 删除应用程序的数据(删除数据库以便调用onCreate)。
    • 卸载应用程序(删除数据库以便调用onCreate)。
    • 如果 onUpgrade 方法将删除表,然后调用 onCreate ,以增加作为第 4 个参数传递给 SQLIteOpenHelper 子类(也称为 DatabaseHelper 类)的数据库版本号。李>

    执行上述任一操作后,重新运行应用程序。

    注意任何现有数据都将丢失。

    • 如果必须保留数据,则修复会更加复杂,但将基于使用 ALTER TABLE 语句。

    【讨论】:

    • 谢谢你,先生 :) 重现这些步骤时,一切都以某种方式解决了。现在我在注册并尝试登录后得到的只是:电子邮件或密码错误。。有一个新的错误,时间现在对新的生气:D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-02
    相关资源
    最近更新 更多