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

あなたはこのテーブルをエクスポートし、it.ifは根は、あなたが別のフォルダにコピーすることができません確認することができます(動作可能).suggestion:

  • sqliteのコードのprintfが

  • をスクリーニングします

    (自分自身のためのコードを確認していない)「sqliteMan」

  • ようですが、最初のツールでSQLの正しさを確認し、[コードを書くのがベストです、その正しさを検証するためのシンプルなツールを使用します

個人的な意見では、スプレーしたくないです。 i

0

既にテーブル列を作成して変更したが変更しない場合があります。アプリケーションをキャッシュから消去したり、データをクリアしたりすることができます。これがうまくいきたいです。

関連する問題