2012-04-11 25 views
5

データベースを使用して日付を保存していて、idがwhere clausに指定されていることに基づいて1つの列が返されます。私は、データベース内にあるが、私は、データベースにないシリアルを使用していたときに、それは近い私に力を与えて、シリアルを使用している場合カーソルに結果があるかどうかを調べる

public String getPmax(String serial) { 

    String[] columns = new String[]{KEY_SERIAL, KEY_PMAX};  
    Cursor c = ourDatabase.query(DATABASE_TABLE, columns, "serial = " + serial, 
    null, null, null, null); 

    String result = "nothing found"; 

    if(c != null) { 

     int iPmax = c.getColumnIndex(KEY_PMAX); 

     c.moveToFirst(); 
     result = c.getString(iPmax); 

    } 

    return result; 

} 

このコードは動作します!

それは言う:

04-11 16:31:19.423: E/AndroidRuntime(21226): java.lang.RuntimeException: Unable to start activity ComponentInfo{nl.janjanus.solardetect/nl.janjanus.solardetect.DatabaseView}: android.database.sqlite.SQLiteException: no such column: g: , while compiling: SELECT serial, pmax FROM SolareCel WHERE serial = g 

だから私の質問は次のとおりです。結果があるかどうかはどのようにチェックしますか?または、シリアル番号がデータベースにあるシリアル番号かどうかを確認する必要がありますか?カーソルが要素があるかどうかをチェックすることができます

答えて

36
if (!(mCursor.moveToFirst()) || mCursor.getCount() ==0){ 
    //cursor is empty 
} 
+0

カーソルには行がありません。空ですが、上記のテストはまだ失敗します。なぜですか?他の小切手はありますか?これは本当に困惑しています。 – Namratha

+2

注:これには、カーソルを最初の位置に設定するという副作用があります。特定の位置に移動されたカーソルオブジェクトを別の関数に渡しても、まだその位置にあることが予想される場合は、問題が発生する可能性があります。 –

2

boolean isEmpty = cursor.getCount() < 1; 

私の知る限りがちょうど空のカーソルを返し、要求条件、何行がない場合、カーソルがnullを返すことはありません。

+1

例外が機能していても、私にとっては機能しません。これを行う他の方法はありますか? – Faas

4

よく見ると、エラーはSQLに障害があることです。 gを列として読み取ります。あなたはアポストロフィでそれを囲む必要があります。'g'。あなたのケースでは

、カーソルを取得する行は次のようになります。カーソルは何の結果を持っていないかどうかをチェックするよう

Cursor c = ourDatabase.query(DATABASE_TABLE, columns, "serial = '" + serial + "'", 
    null, null, null, null); 

、サミールMangroliyaの答えを見てください。

0
int x = cursor.getCount(); //this will return number of records in current cursor 
if (x == 0) { 
    // there are no records 
} else { 
    // do your stuff 
} 
関連する問題