2010-12-14 25 views
1

実際には、データベースに保存されているテキストフィールド(つまり一意の値)に既に入力されているものと同じ名前を受け入れたくありません。テキストフィールドに入力されたデータベース値とテキストフィールド値を比較する方法

たとえば、テキストフィールドに「健康」という名前を入力して保存しました。再度同じ名前を入力した場合、それは受け入れられません。

私は以下を試しましたが、動作しません。私を助けてください。あなたのコード内

boolean ifExisting(String cat) 
    { 
     Cursor c = db.rawQuery("SELECT * FROM " + "restaurants" + "WHERE" + "category" + "=" + cat, null); 
     if(c.getCount() == 0) 
     { 
      return; 
     } 
      else 
      { 
      return; 
      } 
    } 
     insert(); 

答えて

0

3つの問題:

  • あなたの関数はブール戻り値の型を持っていますが、あなたのif文の両方のケースで、あなたは何もを返しません。おそらく、適切なブール値を返すようにしてください。

  • すべてのsqlite操作でエラーがないかチェックしてください。さもなければ、あなたは静かに失敗し、あなたのコードは、DBに一致する行がないと仮定します。

  • 文字列を連結してSQLクエリを作成することは不正です。非常に安全ではない習慣であり、SQLインジェクション攻撃などのコードを開きます。ユーザーがcatテキストフィールドに"italian"; delete from restaurantsと入力した場合はどうなりますか?これを防ぐには、ホストされたパラメータを使用する必要があります。

EDIT:LadaRaiderの答えを1として

、また、あなたのSQLクエリで、いくつかのスペースが不足しているように見えます。さらにもう一つの理由はではなく、それを構築するために文字列を連結するためのではありません。

0

「WHERE」という単語の前後にスペースはありません。あなたはこれを書いています:

"SELECT * FROM restaurantsWHEREcategory=" + cat 

空白を追加するだけでよいでしょう。

ところで、rawQueryを使用すると、文字列を解析する時間が非常に遅くなります。あなたはAndroid SDKのsamples /ディレクトリのNotePadアプリを見てください。

+0

これは他の人にも気付かなかった... – thkala

関連する問題