2016-04-11 9 views
-1

私のデータベースからIDで行を取得しようとしている最期の時間があり、なぜ動作していないのか分からない。私DatabaseHelperクラスでAndroidのSQLiteデータベースからの単一行

は私が

public Cursor getData(String Id) { 

     SQLiteDatabase db = this.getWritableDatabase(); 
     Cursor res = db.rawQuery("select * from " + BirdDB.BIRD_TABLE + "Where BIRD_ID = ?", new String[]{Id}); 
     return res; 

    } 

Col_0は、テーブル内の鳥のIDでこのコードのスニペットを持っています。 これは私の活動ページにあります。

public void viewASingle() { 
     viewABird.setOnClickListener(
       new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         Cursor res = MainActivity.myDB.getData(txt_Id.getText().toString()); 
         if (res.getCount() == 0) { 

          showMessage("Error", "Nothing Found"); 
          return; 
         } 
         StringBuffer buffer = new StringBuffer(); 
         while (res.moveToNext()) { 

          buffer.append("ID :" + res.getString(0) + "\n"); 
          buffer.append("Name : " + res.getString(2) + "\n"); 
          buffer.append("Notes : " + res.getString(3) + "\n"); 
          buffer.append("Location : " + res.getString(4) + "\n"); 
          buffer.append("Date And Time : " + res.getString(5) + "\n"); 
         } 

         showMessage("Data", buffer.toString()); 
        } 
       } 
      ); 
    } 

コードの残りの部分が機能していることを確認しました。それはトーストメッセージです。アプリはrawQueryステートメントでクラッシュし、私はそれを正しくやっていると信じていました。私は他のスタックオーバーフローの質問をチェックアウトして、彼らの声明を試みたが、うーん、役に立たない。だから、誰かからどんなアイデア?

+0

クラッシュに関する質問には常にクラッシュログを投稿してください。 – F43nd1r

答えて

3

"Where BIRD_ID = ?"を連結する前に空白を残しておくと、表の名前が条件に固執しません。また、例外処理を使用することをお勧めします。デバッグに役立ち、プログラムの安定性を向上させます。

+0

うわー....私は馬鹿だと感じる。大いに感謝する。時間が経過すると、正しいボタンをクリックします。 –

関連する問題