3

カーソル オブジェクトで選択クエリを実行した結果です。テーブルにブール列がいくつかあります。SQLite のブール型の値は、それぞれ false または true に応じて 0 または 1 になります。0 または 1 またはその他の整数値として値を持つことができる int 型の列もあります。カーソルから列の値を次のように返したいのですが、

if column is of boolean type
   return true if value = 1
   return false if value = 0
else 
   return the same value

どうすればこれを達成できますか?

4

4 に答える 4

1

カーソルオブジェクトから列がブール値であるかどうかを判断する方法は?

そのため、最初はブール型SQLiteを持たず、integer、string、float、blob のみです。したがって、私の提案は単に int 列の値をテストし、結果に基づいて適切なアクションを実行することです。

Cursor c = db.rawQuery(query, whereArgs);
int value = 0;
String[] intColumnNames = {columns};
int index = 0;
if (c.moveToFirst()) {
   while (index < intColumnNames.length) {
      do {
         value = c.getInt(c.getColumnIndex(intColumnNames[index]));
         switch (value) {
            case 0:
               // do some action
            break;
            case 1:
               // do some action
            break;
            default:
               // do some action for other cases
            break;
         }
      } while(c.moveToNext());
      index++;
   }
}
于 2013-03-11T09:38:51.753 に答える
0

以前に同様の問題に直面したことがないため、保証された回答を投稿できません。しかし、あなたの質問は本当に興味深いようで、少し検索した後、1つの解決策が選択肢になると思います..

列のデータ型を決定するデータを読み取る前の最初のステップ。これには、次のリンクが役立つ場合があります

https://stackoverflow.com/a/6298521/931982

https://stackoverflow.com/a/3106349/931982

次に、列の型がブール値であることがわかった場合は、他の2つのメンバーが提供する解決策に従ってください。

注意:確認された回答ではありません。私の考えを投稿しただけです。私はこれにコメントしたでしょうが、コメントに書くには大きすぎます:(

于 2013-03-11T09:55:46.123 に答える
0

SQLite に BOOLEAN 記憶域型がないことは事実ですが、BOOLEAN をデータ型として使用して列を定義することを止めるものは何もありません。NUMERIC として格納されます。アプリケーションは PRAGMA table_info( を使用してデータ型を取得し、BOOLEAN の場合のみ true/false チェックを行うことができます。

于 2013-03-13T17:11:19.723 に答える
-1

これを試して

int columnNumber = 11;
while (cursor.moveToNext()) {
   if( cursor.getInt(columnNumber) > 0){
//true
}

}

sqlite には boolean を使用する Boolean データ型がないため、データ型が必要ですINTEGER SQLite does not have a separate Boolean storage class. Instead, Boolean values are stored as integers 0 (false) and 1 (true). 。 詳細

于 2013-03-11T09:23:00.593 に答える