6

私はAndroidでSqliteを使用しており、データベースから値を取得するには、次のようなものを使用します。

Cursor cursor = sqliteDatabase.rawQuery("select title,category from table", null);

int columnIndexTitle = cursor.getColumnIndex("title");
iny columnIndexCategory = cursor.getColumnIndex("category");

cursor.moveToFirst();
while (cursor.moveToNext()) {
    String title = cursor.getString(columnIndexTitle);  
    String category = cursor.getString(columnIndexCategory);    
}
cursor.close();

1つの方法で実行できるように、独自のカーソルを作成したいと思いgetColumnIndex()ますgetString()。このようなもの:

String title = cursor.getString("title");

取得したカーソルを拡張する独自のクラスを作成したいのですがsqliteDatabase.rawQuery、これを実現する方法がわかりません。SQLiteCursorを拡張する必要がありますか、それともどのように行う必要がありますか?それも可能ですか、それは良い考えですか?

4

5 に答える 5

3

独自の getString を作成すると、getColumnIndex だけでなく、呼び出しごとにマップ ルックアップが発生します。

SQLiteCursor.getColumnIndexAbstractCursor.getColumnIndexのコードは次のとおりです。行数が多い場合、この関数の呼び出しを減らすと、不要な文字列処理とマップ ルックアップが回避されます。

于 2011-04-12T19:02:46.283 に答える
2

私はそれを拡張しません、私はヘルパーを作ります:

class MartinCursor {
    private Cursor cursor;

    MartinCursor(Cursor cursor) {
        this.cursor = cursor;
    }

    String getString(String column) {
        ....
    }
}

また

class MartinCursorHelper {
    static String getString(Cursor cursor, String column) {
        ....
    }
}

個人的には、この余分な引数を常に提供するのが嫌でない限り、後者を使用します。

編集: pydave の重要な点に言及するのを忘れていました: これをループで呼び出すと、パフォーマンスに顕著な影響を与えるように設定されています。推奨される方法は、インデックスを一度ルックアップしてキャッシュし、代わりにそれを使用することです。

于 2011-04-12T18:31:15.320 に答える
0

値を簡単に取得するには、すでに Android SDK に含まれているDatabaseUtils .stringForQuery() 静的メソッドを使用する必要があります。この例はStringボット用で、次のメソッドもあります。Long

stringForQuery(SQLiteDatabase db, String query, String[] selectionArgs)

データベースでクエリを実行し、最初の行の最初の列の値を返すユーティリティ メソッド。

何かのようなもの

String myString=DatabaseUtils.stringForQuery(getDB(),query,selectionArgs);
于 2011-04-12T18:29:58.427 に答える