2016-05-02 22 views
0

名前、電子メールなどの個人情報が入力され、「送信」ボタンを押すことでSQLiteデータベースに格納される基本的なAndroidアプリケーションを作成していますこれは完全に機能します)。 1つのフィールドが入力されたときにデータベース内の対応する人物を検索する検索ボタンがあります(たとえば、フィールド名には文字列「harry」が与えられ、他のフィールドにはnull値が格納されます)。これは私のDatabaseHelperクラスに対応するコードです:引数がnullの場合、RawQueryは機能しません

public Person getPerson(String naam, String adres, String email, String geslacht, 
     String leeftijd, String geboortedatum){ 
    Log.i("Main activity","Person to find: "+naam); 
    SQLiteDatabase db= this.getReadableDatabase(); 
    Cursor curs=db.rawQuery("SELECT name FROM personen WHERE (name = ?) OR (adress = ?) " 
      + "OR (email = ?) OR (gender = ?) OR (age = ?) OR (birthday = ?)", 
      new String[]{naam, adres, email, geslacht, leeftijd, geboortedatum}); 
    Log.i("Main activity", "Query works"); 

すべての引数[]フィールドに値が与えられますが、与えているとき、私は、エラーがスローされた場所を確認するためにログを使用してrawQueryが動作しないことがわかりました1つのフィールド(電子メールなど)にNULL値が含まれている場合のエラー。これはなぜ私はANDステートメントの代わりにORステートメントを使用する必要がありますか?そうでない場合は、アプリですべてのフィールドが入力されていない場合はどうすればいいですか?あなたの刺し傷は、それがない場合は、ダミーの値によってそれを置き換える、初期化されている場合

new String[]{naam == null? "''":naam, etc} 

チェック:

答えて

0

速い修正ではそのような何かをしなければなりません。名前で

+0

なぜ2つの引用符を含む文字列ですか? –

+0

空文字列を入力すると、SQLが機能しないので、プレースホルダに何か文字列を入れなければなりません。WHERE(name =)はエラーをスローします –

+0

パラメータはテキストで置き換えられません。それらはSQL式の値として終了します。 –

-1

検索:アクセスのための

// Getting single contact 
Contact getContact(String name) { 
SQLiteDatabase db = this.getReadableDatabase(); 

Cursor cursor = db.query(TABLE_CONTACTS, new String[] { KEY_ID, 
     KEY_NAME, KEY_PH_NUM }, KEY_NAME + "=?", 
     new String[] { name }, null, null, null, null); 
//... 

Contact contact = null; 
if (cursor.moveToFirst()) { 
contact = new Contact(Integer.parseInt(cursor.getString(0)), 
     cursor.getString(1), cursor.getString(2)); 
} 
cursor.close(); 
// can return null if no contact was found. 
return contact; 
+0

ありがとうございますが、実際は問題です。 –

0

rawQuery()は、文字列配列を期待しますが、nullは有効な文字列ではありません。

パラメータを指定せずにNULLをSQL文字列に直接入力する必要があります。 しかし、文字列を動的に作成する場合は、その比較を省略することもできます。

+0

エラーログには「インデックスのバインド値...がnullです」と表示されることがあります。インデックス4、時には6などと表示されることもあります。何か私はここで行方不明ですか? –

関連する問題