2017-09-24 1 views
0

Ich finde ähnliche Fragen, die alle fehlende Kommas, Whitespaces usw. betreffen. Allerdings finde ich nichts dergleichen in meinem Code, so dass diese Antworten mir hier nicht helfen, es sei denn, ich ' Ich habe etwas in meiner Syntax völlig vermisst.SQLiteException keine solche Spalte user_email

Ich versuche, herauszufinden, warum ich die Störung erhalten

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

, wenn ich meinen Register-Button klicken. Hier ist onClick und postDataToSQLite Methoden aus meiner Register Aktivitätsklasse:

/** 
* 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(); 
    } 
} 

Hier ist meine DatabaseHelper Klasse:

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

Ist es möglich, dass diese Tabelle erstellt wurde, bevor die Spalte user_email an die Abfrage create table angefügt wurde? –

Antwort

0

ich heute etwas gelernt. Ich hatte tatsächlich einen Syntaxfehler in meiner CREATE_USER_TABLE Zeichenfolge. Ich schaute in meiner Heimat in Android Studio, und entdecken, dass es ursprünglich war:

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

Und die neue Version ist:

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

jedoch, das Problem war, dass nach diesem Problem zu beheben, Ich habe die App nicht aus meinem Emulator entfernt, wodurch der Fehler verursacht wurde. Ich musste lediglich die App löschen und die onCreate() -Methode ausführen lassen. Problem gelöst. :-)

0

Sie diese Tabelle exportieren kann, und überprüft it.if nicht Wurzel, können Sie es in einem anderen Ordner (betriebsfähig) .suggestion kopieren:

  • SQLite Code printf

  • zu screenen

    Verwenden Sie ein einfaches Werkzeug, um seine Richtigkeit zu überprüfen, wie „sqliteMan“

  • am besten ist es, die Richtigkeit der sQL auf dem Werkzeug, um zuerst zu bestätigen, und dann den Code schreiben (für ihre eigenen nicht den Code bestätigen)

Persönliche Meinung, nicht gerne sprühen. i

0

In einigen Fällen haben Sie bereits Tabellenspalten erstellt und Sie haben sie geändert, aber sie werden nicht geändert. Sie können den Cache löschen oder die Anwendung löschen. Hoffe, das funktioniert.

Verwandte Themen