7

以下は、sqlite db テーブルの特定のフィールドに対応する int 値を取得するために使用するクエリです。

"SELECT conn_status FROM profiles WHERE devID = '" + id+"'"

提供された devID に対応する「conn_status」に値が保存されていない場合、テーブル内の既存の値は null になります。次のように、Java からデータを取得します。

c.getInt(c.getColumnIndex("conn_status"))

ここでの問題は、指定された query で、フィールドに存在する値が null であっても c.getInt が 0 を返すことです。値が null の場合、0 ではなく別の値、たとえば 5 を返すように、このクエリを変更するにはどうすればよいですか。

どんな助けでも大歓迎です。

4

7 に答える 7

17

機能を使用できますisNull()。次に例を示します。

static int getInt(String columnName)
{
    if(c.isNull(c.getColumnIndex(columnName)))
        return -1;
    return c.getInt(c.getColumnIndex(columnName));
}
于 2012-09-24T13:23:00.420 に答える
16

SQLite では、関数を使用して値IFNULLを置き換えることができます。NULL

SELECT IFNULL(conn_status, 5) FROM profiles WHERE devID = ?
于 2012-09-24T15:18:08.210 に答える
3

intin Java はプリミティブ データ型であり、 にすることはできませんnull。したがって、getInt によって返される値がない場合は、0 が返されます。Integer オブジェクトは null の可能性があるため、ロジックで 0 ではなく null をチェックする必要がある場合は、int ではなく Integer を使用することを検討してください。

于 2012-09-24T13:23:38.250 に答える
0

Android では、int プリミティブではなく Integer オブジェクトを使用します。Integer は null 可能であり、プリミティブ int は例外を引き起こします。モデルで、値が null かどうかを確認するか、コンテンツを処理します。

/**
 * Return real integer of value or null
 * @param column_name Name of column in result
 */
public Integer getInt(String column_name){
    try{
        if(cursor.isNull(cursor.getColumnIndex(column_name)))
            return null;
        return cursor.getInt(cursor.getColumnIndex(column_name));
    }catch(Exception e){
        e.printStackTrace();
        Log.e("sqlite_exception", "column " + column_name + " not exists. " + e.getMessage());
        return null;
    }
}
于 2015-04-13T19:41:49.227 に答える
0

getType() を呼び出すと、列が null かどうかを確認できます。

Integer locationInfoId;

if (cursor.getType(columnIndex) == Cursor.FIELD_TYPE_NULL){
    locationInfoId = null;
} else {
    locationInfoId = cursor.getInt(columnIndex);
}

columnIndex++;
于 2016-10-24T07:39:29.740 に答える