2016-06-29 1 views
0

SQLiteを使用してユーザー名とパスワードを格納するデータベースを設定しようとしていますが、エミュレータのアカウントに登録するとエラーになります。また、私は登録せずにログインしようとするとエラーになります。これは私の2番目の投稿だけですので、もし何かがあれば私は投稿したときに私がもっと良くすることができます私に教えてください!ここでAndroid Studio 2.1を使用してSQLiteデータベースから値を取得できません

public class DbHelper extends SQLiteOpenHelper { 
private static String DbName = "SimpleDatabase"; 
private static int DbVersion = 1; 

//Table Names 
private static final String TABLE_USER = "User"; 

//Column Names 
private static final String USER_NAME = "UserName"; 
private static final String PASSWORD = "Password"; 

//Create statements 
// Todo table create statement 
private static final String CREATE_TABLE_USER = "CREATE TABLE " 
     + TABLE_USER + "(" + USER_NAME + "TEXT PRIMARY KEY," 
     + PASSWORD + "TEXT)" ; 

public DbHelper(Context context) { 
    super(context, DbName, null, DbVersion); 
} 


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

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    db.execSQL("DROP TABLE IF EXIST "+TABLE_USER); 
    onCreate(db); 
} 

public Boolean InsertUser(String userName,String password){ 
    SQLiteDatabase db = this.getWritableDatabase(); 

    String query = "SELECT * FROM "+TABLE_USER+" WHERE "+USER_NAME+" == '"+userName+"';"; 
    Cursor c = db.rawQuery(query,null); 
    if(c != null && c.moveToFirst()) { 
     c.close(); 
     return false ; 

    }else{ 
     ContentValues values = new ContentValues(); 
     values.put(USER_NAME, userName); 
     values.put(PASSWORD, password); 

     db.insert(TABLE_USER, null, values); 
     return true; 
    } 
} 

public Boolean loginUser(String userName,String password){ 

    SQLiteDatabase db = this.getWritableDatabase(); 
    String query = "SELECT * FROM "+TABLE_USER+" WHERE "+USER_NAME+" == '"+userName+"' AND "+PASSWORD+" == '"+password+"';"; 
    Cursor c = db.rawQuery(query,null); 
    if(c != null && c.moveToFirst()) { 
     c.close(); 
     return true; 
    } 
    return false; 
} 

}

ここDbHelper

public class Login extends Fragment { 

TextInputLayout usernamelayout, passwordLayout; 
EditText userName,password; 
Button login, goToRegister; 
@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    return inflater.inflate(R.layout.content_login,container,false); 
} 

@Override 
public void onViewCreated(final View view, Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 
    usernamelayout = (TextInputLayout)view.findViewById(R.id.user_name_layout); 
    passwordLayout = (TextInputLayout)view.findViewById(R.id.password_layout); 
    userName = (EditText)view.findViewById(R.id.user_name); 
    password = (EditText)view.findViewById(R.id.password); 
    login = (Button)view.findViewById(R.id.login_button); 
    login.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      String userText = userName.getText().toString().trim(); 
      String passwordText = password.getText().toString().trim(); 
      if (userText.isEmpty()) { 
       usernamelayout.setErrorEnabled(true); 
       usernamelayout.setError("Please Enter User Name"); 

      } else if (passwordText.isEmpty()) { 
       passwordLayout.setErrorEnabled(true); 
       passwordLayout.setError("Please Enter Password"); 
      } else { 
       DbHelper helper = new DbHelper(getActivity()); 
       if (helper.loginUser(userText, passwordText)) { 
        startActivity(new Intent(getActivity(), MainActivity.class)); 
       } else { 
        Toast.makeText(getActivity(), "User Name or Password is incorrect", Toast.LENGTH_SHORT).show(); 
       } 
      } 
     } 
    }); 
    goToRegister = (Button)view.findViewById(R.id.go_to_register_button); 
    goToRegister.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Register fragment = new Register(); 
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){ 
       setSharedElementReturnTransition(TransitionInflater.from(getActivity()).inflateTransition(R.transition.change_image_trans)); 
       setExitTransition(TransitionInflater.from(getActivity()).inflateTransition(android.R.transition.fade)); 
       fragment.setSharedElementEnterTransition(TransitionInflater.from(getActivity()).inflateTransition(R.transition.change_image_trans)); 
       fragment.setEnterTransition(TransitionInflater.from(getActivity()).inflateTransition(android.R.transition.fade)); 

      } 

      FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction(); 
      transaction.addSharedElement(view.findViewById(R.id.logo),"LOGO"); 
      transaction.replace(R.id.main_container, fragment); 
      transaction.commit(); 
     } 
    }); 
} 

@Override 
public void onActivityCreated(@Nullable Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    getActivity().setTitle("Uhvents Login"); 
} 

}

で行くLOGINクラスはREGISTERクラスです。ここでは、その後

public class Register extends Fragment { 

TextInputLayout usernamelayout, passwordLayout; 
EditText userName,password; 
Button register, goToLogin; 
@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    return inflater.inflate(R.layout.content_register,container,false); 
} 
@Override 
public void onViewCreated(final View view, Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 
    usernamelayout = (TextInputLayout) view.findViewById(R.id.user_name_layout); 
    passwordLayout = (TextInputLayout) view.findViewById(R.id.password_layout); 
    userName = (EditText) view.findViewById(R.id.user_name); 
    password = (EditText) view.findViewById(R.id.password); 

    register = (Button) view.findViewById(R.id.register_button); 
    register.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      String userText = userName.getText().toString().trim(); 
      String passwordText = password.getText().toString().trim(); 
      if(userText.isEmpty()) { 
       usernamelayout.setErrorEnabled(true); 
       usernamelayout.setError("Please Enter User Name"); 

      } 
      else if (passwordText.isEmpty()){ 
       passwordLayout.setErrorEnabled(true); 
       passwordLayout.setError("Please Enter Password"); 

      } 
      else { 

       DbHelper helper = new DbHelper(getActivity()); 
       if (helper.InsertUser(userText,passwordText)){ 
        Toast.makeText(getActivity(), "Registration Success", Toast.LENGTH_SHORT).show(); 
        if (getActivity().getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) 
        { 
         goToLogin.performClick(); 
        } 
       }else { 
        Toast.makeText(getActivity(), "User Name already in use.",Toast.LENGTH_SHORT).show(); 
       } 
      } 
     } 
    }); 
    goToLogin = (Button)view.findViewById(R.id.go_to_login); 
    goToLogin.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

      Login fragment = new Login(); 
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){ 
        setSharedElementReturnTransition(TransitionInflater.from(getActivity()).inflateTransition(R.transition.change_image_trans)); 
        setExitTransition(TransitionInflater.from(getActivity()).inflateTransition(android.R.transition.fade)); 
        fragment.setSharedElementEnterTransition(TransitionInflater.from(getActivity()).inflateTransition(R.transition.change_image_trans)); 
        fragment.setEnterTransition(TransitionInflater.from(getActivity()).inflateTransition(android.R.transition.fade)); 

      } 

      FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction(); 
      transaction.addSharedElement(view.findViewById(R.id.logo),"LOGO"); 
      transaction.replace(R.id.main_container, fragment); 
      transaction.commit(); 
     } 

}); 
} 
@Override 
public void onActivityCreated(@Nullable Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    getActivity().setTitle("Register for Uhvents"); 
} 

}

そして、私は上記の描かれたシナリオを実行するたびに、私は取得していますエラーログです。

致命的な例外:メインプロセス:com.uhdapt.tutorial4、PID:4807 android.database.sqlite.SQLiteException:そのようなカラム:ユーザー名(コード1)、コンパイル中:SELECT * FROMユーザーのユーザー名== 'alex' ANDパスワード== '1234' android.database.sqlite.SQLiteConnection.nativePrepareStatement(ネイティブメソッド) android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:887) android.database.sqlite .SQLiteConnection.prepare(SQLiteConnection.java:498)android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)の android.database.sqliの (SQLiteDirectCursorDriver.java:44) (android.database.sqlite.SQL)。 (SQLiteDatabase.java:1255) at com.uhdapt.tutorial4.database.DbHelper.loginUser(DbHelper.java:SQLiteDatabase.java:1255) 68) at com.uhdapt.tutorial4.fragments.Login $ 1.onClick(Login.java:63) at android.view.View.performClick(View.java:5198) android.view.View $ PerformClick.run (View.java:21147)0 android.os.Looper.loopでandroid.os.Handler.dispatchMessage(Handler.java:95) でandroid.os.Handler.handleCallback(Handler.java:739) (Looper.java:148) ででandroid.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(ネイティブメソッド) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726) ) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

+0

は 'プライベート静的最終文字列USER_NAME =「ユーザー名」のように列名とデータ型の間にスペースを追加します。 プライベートstatic final String PASSWORD = "パスワード"; ' –

答えて

1

連結にスペースを追加する必要があります。

この部分にはスペース

" + USER_NAME + "TEXT PRIMARY KEY," 

この

+ PASSWORD + "TEXT)"; 

だから

private static final String CREATE_TABLE_USER = "CREATE TABLE " 
     + TABLE_USER + "(" + USER_NAME + " TEXT PRIMARY KEY," 
     + PASSWORD + " TEXT)"; 
0

にそれを変更していない例外スタックトレースはで見つけることができない列名のユーザー名が含まれていますSQLiteデータベースのUserテーブル:

android.database.sqlite.SQLiteException:そのようなカラム:ユーザー名(コード1)、 コンパイル中:ユーザからユーザ名== 'アレックス' とパスワード== '1234' *

を選択次のようにその問題を解決するには

、データベースのヘルパークラスを変更する必要があります。

public class DbHelper extends SQLiteOpenHelper { 

    private static final String DbName = "SimpleDatabase"; 
    private static final int DbVersion = 1; 

    // Table Names 
    private static final String TABLE_USER = "User"; 

    // Column Names 
    private static final String USER_NAME = "UserName"; 
    private static final String PASSWORD = "Password"; 

    // Create statements 
    // Todo table create statement 
    private static final String CREATE_TABLE_USER = "CREATE TABLE " 
      + TABLE_USER + " (" + USER_NAME + " TEXT PRIMARY KEY," 
      // >>>>>> Note extra space above before TEXT keyword 
      + PASSWORD + " TEXT)" ; 

    public DbHelper(Context context) { 
     super(context, DbName, null, DbVersion); 
    } 


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

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     db.execSQL("DROP TABLE IF EXIST "+TABLE_USER); 
     onCreate(db); 
    } 

    public Boolean InsertUser(String userName,String password){ 
     SQLiteDatabase db = this.getWritableDatabase(); 

     String query = "SELECT * FROM "+TABLE_USER+" WHERE "+USER_NAME+" == '"+userName+"';"; 
     Cursor c = db.rawQuery(query,null); 

     if (c != null && c.moveToFirst()) { 
      c.close(); 
      return false ; 
     } else { 
      ContentValues values = new ContentValues(); 
      values.put(USER_NAME, userName); 
      values.put(PASSWORD, password); 

      db.insert(TABLE_USER, null, values); 
      return true; 
     } 
    } 

    public Boolean loginUser(String userName,String password){ 

     SQLiteDatabase db = this.getWritableDatabase(); 
     String query = "SELECT * FROM " + TABLE_USER + 
     " WHERE "+USER_NAME+" == '"+userName+"' AND " 
     + PASSWORD + " == '"+password+"';"; 

     Cursor c = db.rawQuery(query,null); 

     if(c != null && c.moveToFirst()) { 
       c.close(); 
       return true; 
     } 

     return false; 
    } 
} 
関連する問題