2017-09-24 43 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

在某些情況下,您已經創建了表格列,並且對其進行了修改,但未進行修改。您可以清除緩存或清除應用程序的數據。希望這可以工作。

相關問題