2017-09-24 58 views
0

我发现类似的问题,所有涉及丢失逗号,空格等等。但是,我没有在我的代码中找到任何类似的东西,所以这些答案不帮我在这里,除非我'我的语法完全错过了一些东西。SQLiteException没有这样的列user_email

我试图找出为什么我收到错误

SQLiteException no such column: user_email (code 1):, while compiling: 
SELECT user_id FROM user WHERE user_email=? 

当我点击我的注册按钮。下面是从我的注册Activity类的onClick和postDataToSQLite方法:

/** 
* This implemented method is to listen the click on view 
* 
* @param v 
*/ 
@Override 
public void onClick(View v) { 
    switch (v.getId()) { 

     case R.id.appCompatButtonRegister: 
      postDataToSQLite(); 
      break; 

     case R.id.appCompatTextViewLoginLink: 
      finish(); 
      break; 
    } 
} 
/** 
* This method is to validate the input text fields and post data to SQLite 
*/ 
private void postDataToSQLite() { 
    if (!inputValidation.isInputEditTextFilled(textInputEditTextName, textInputLayoutName, getString(R.string.error_message_name))) { 
     return; 
    } 
    if (!inputValidation.isInputEditTextFilled(textInputEditTextEmail, textInputLayoutEmail, getString(R.string.error_message_email))) { 
     return; 
    } 
    if (!inputValidation.isInputEditTextEmail(textInputEditTextEmail, textInputLayoutEmail, getString(R.string.error_message_email))) { 
     return; 
    } 
    if (!inputValidation.isInputEditTextFilled(textInputEditTextPassword, textInputLayoutPassword, getString(R.string.error_message_password))) { 
     return; 
    } 
    if (!inputValidation.isInputEditTextMatches(textInputEditTextPassword, textInputEditTextConfirmPassword, 
      textInputLayoutConfirmPassword, getString(R.string.error_password_match))) { 
     return; 
    } 

    if (!databaseHelper.checkUser(textInputEditTextEmail.getText().toString().trim())) { 

     user.setName(textInputEditTextName.getText().toString().trim()); 
     user.setEmail(textInputEditTextEmail.getText().toString().trim()); 
     user.setPassword(textInputEditTextPassword.getText().toString().trim()); 

     databaseHelper.addUser(user); 

     // Snack Bar to show success message that record saved successfully 
     Snackbar.make(nestedScrollView, getString(R.string.success_message), Snackbar.LENGTH_LONG).show(); 
     emptyInputEditText(); 
    } else { 
     // Snack Bar to show error message that record already exists 
     Snackbar.make(nestedScrollView, getString(R.string.error_email_exists), Snackbar.LENGTH_LONG).show(); 
    } 
} 

这里是我DatabaseHelper类:

package sql; 

import android.content.ContentValues; 
import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import java.util.ArrayList; 
import java.util.List; 
import android.database.Cursor; 
import modal.User; 



/** 
* Created by christopher on 9/21/17. 
*/ 

public class DatabaseHelper extends SQLiteOpenHelper { 

//Database Version 
private static final int DATABASE_VERSION = 1; 

//Database Name 
private static final String DATABASE_NAME = "WillowHQ.db"; 

//User table name 
private static final String TABLE_USER = "user"; 

//User Table Column names 
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"; 

//create table sql query 
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" + ")"; 

//drop table sql query 
private String DROP_USER_TABLE = "DROP TABLE IF EXISTS " + TABLE_USER; 

/** 
* Constructor 
* 
* @param context 
*/ 
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) { 

    //Drop User Table if exists 
    db.execSQL(DROP_USER_TABLE); 

    //create tables again 
    onCreate(db); 
} 
/** 
* Create user record 
* 
* @param user 
*/ 
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()); 

    //Inserting Row 
    db.insert(TABLE_USER, null, values); 
    db.close(); 
} 
/** 
* Fetch all users and return the list of user records 
* 
* @return list 
*/ 
public List<User> getAllUser() { 
    //array of columns to fetch 
    String[] columns = { 
      COLUMN_USER_ID, 
      COLUMN_USER_EMAIL, 
      COLUMN_USER_NAME, 
      COLUMN_USER_PASSWORD 
    }; 
    //sorting orders 
    String sortOrder = 
      COLUMN_USER_NAME + " ASC"; 
    List<User> userList = new ArrayList<User>(); 

    SQLiteDatabase db = this.getReadableDatabase(); 

    //query the user table 
    /** 
    * Here query function is used to fetch records from user table this function works like we use sql query. 
    * SQL query equivalent to this query function is 
    * SELECT user_id,user_name,user_email,user_password FROM user ORDER BY user_name; 
    */ 
    Cursor cursor = db.query(TABLE_USER, columns, null, null, null, null, sortOrder); 

    //Traversing through all rows and adding to the list 
    if(cursor.moveToFirst()) { 
     do { 
      User user = new User(); 
      user.setId(Integer.parseInt(cursor.getString(cursor.getColumnIndex(COLUMN_USER_ID)))); 
      user.setName(cursor.getString(cursor.getColumnIndex(COLUMN_USER_NAME))); 
      user.setEmail(cursor.getString(cursor.getColumnIndex(COLUMN_USER_EMAIL))); 
      user.setPassword(cursor.getString(cursor.getColumnIndex(COLUMN_USER_PASSWORD))); 
      // Adding user record to list 
      userList.add(user); 
     } while (cursor.moveToNext()); 
    } 
    cursor.close(); 
    db.close(); 

    // return user list 
    return userList; 
} 
/** 
* This method to update user record 
* 
* @param user 
*/ 
public void updateUser(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()); 

    // updating row 
    db.update(TABLE_USER, values, COLUMN_USER_ID + " = ?", 
      new String[]{String.valueOf(user.getId())}); 
    db.close(); 
} 

/** 
* This method is to delete user record 
* 
* @param user 
*/ 
public void deleteUser(User user) { 
    SQLiteDatabase db = this.getWritableDatabase(); 
    // delete user record by id 
    db.delete(TABLE_USER, COLUMN_USER_ID + " = ?", 
      new String[]{String.valueOf(user.getId())}); 
    db.close(); 
} 

/** 
* This method to check user exist or not 
* 
* @param email 
* @return true/false 
*/ 
public boolean checkUser(String email) { 

    // array of columns to fetch 
    String[] columns = { 
      COLUMN_USER_ID 
    }; 
    SQLiteDatabase db = this.getReadableDatabase(); 

    // selection criteria 
    String selection = COLUMN_USER_EMAIL + " = ?"; 

    // selection argument 
    String[] selectionArgs = {email}; 

    // query user table with condition 
    /** 
    * function is used to fetch records from user table 
    * SQL query equivalent to this query function is 
    * SELECT user_id FROM user WHERE user_email = '[email protected]'; 
    */ 

     Cursor cursor = db.query(TABLE_USER, //Table to query 
       columns,     //columns to return 
       selection,     //columns for the WHERE clause 
       selectionArgs,    //The values for the WHERE clause 
       null,      //group the rows 
       null,      //filter by row groups 
       null);      //The sort order 
     int cursorCount = cursor.getCount(); 
     cursor.close(); 
     db.close(); 

    if (cursorCount > 0) { 
     return true; 
    } 
    return false; 
} 
/** 
* This method to check user exist or not 
* 
* @param email 
* @param password 
* @return true/false 
*/ 
public boolean checkUser(String email, String password) { 

    // array of columns to fetch 
    String[] columns = { 
      COLUMN_USER_ID 
    }; 
    SQLiteDatabase db = this.getReadableDatabase(); 
    // selection criteria 
    String selection = COLUMN_USER_EMAIL + " = ?" + " AND " + COLUMN_USER_PASSWORD + " = ?"; 

    // selection arguments 
    String[] selectionArgs = {email, password}; 

    // query user table with conditions 
    /** 
    * Here query function is used to fetch records from user table this function works like we use sql query. 
    * SQL query equivalent to this query function is 
    * SELECT user_id FROM user WHERE user_email = '[email protected]' AND user_password = 'whatever'; 
    */ 
    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; 
    } 
} 
+1

是否有可能在user_email列附加到create table查询之前创建此表? –

回答

0

我今天学到了一些东西。我确实在我的CREATE_USER_TABLE字符串中有语法错误。我看着我的地方史Android Studio中,并发现它原来是:

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

,新的版本是:

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" + ")"; 

然而,问题是修复该问题后,我没有从我的模拟器中删除应用程序,这导致了错误。我所要做的只是删除应用程序,并让onCreate()方法完成它的工作。问题解决了。 :-)

0

您可以导出此表,并检查它。如果不是根用户,你可以把它复制到另一个文件夹(操作)。建议:

  • SQLite的代码的printf筛选

  • 使用简单的工具来验证它的正确性,比如“sqliteMan”

  • 最好是先确认工具上的SQL的正确性,然后编写代码(为自己的不确认的代码)

个人意见,不喜欢喷。 i

0

在某些情况下,您已经创建了表格列,并且对其进行了修改,但未进行修改。您可以清除缓存或清除应用程序的数据。希望这可以工作。

相关问题