0

こんにちはstackoverflow:D

再シャッフルされる可能性があるため、特定の並べ替えが必要なリストビューを使用してAndroidアプリケーションを構築しています。したがって、データベース内の各値の位置を保持するソート列がデータベースにあります。これで、リストに新しい要素を作成するときはいつでも、その並べ替え値をにしたいmaximum+1ので、リストの最後になります。問題は、1つの値を返す生のクエリを作成する方法と、値が取得されたことを確認する方法がわからないことです(データベースが空である可能性があります)。

これまでの私の努力:

Cursor sortcursor = ourDatabase.rawQuery("SELECT MAX(" + KEY_SORT + ") FROM " + TABLE_CASTING + " WHERE " + KEY_USER + "='" + username + "';", null);
int maxSort = sortcursor.getInt(sortcursor.getColumnIndex(KEY_SORT));
maxSort++;
cv.put(KEY_SORT, maxSort);

助けてくれてありがとう:)

4

2 に答える 2

2

この場合、カーソルの列は1つしかないため、sortcursor.getInt(0)の代わりにを使用する必要がありsortcursor.getInt(sortcursor.getColumnIndex(KEY_SORT))ます。次のコードを試してください。

Cursor cursor = ourDatabase.rawQuery("SELECT MAX(" + KEY_SORT + ") FROM " + TABLE_CASTING + " WHERE " + KEY_USER + "='" + username + "';", null);
int maxSort = 0;

if (cursor != null) {
    try {
        if (cursor.moveToFirst() && !cursor.isNull(0)) {
            maxSort = cursor.getInt(0) + 1;
        }
    } finally {
        cursor.close();
    }
}

cv.put(KEY_SORT, maxSort);
于 2013-03-09T16:35:12.520 に答える
1

以下は動作しますが、sqlliteではなくMYSQLで記述されていることに注意してください。ただし、同じ関数が使用可能であると想定しています。次の注文値をテーブルに挿入するためだけに実行しました。テーブルが空の場合は1を返し、空でない場合は値を1ずつ増やします。2番目のサブクエリは順序を返しますが、挿入と組み合わせると便利であることがわかりました。

INSERT INTO table_name (order_column_name) 
VALUES ( 
    (SELECT CASE WHEN MAX(tn.order_column_name) IS NULL THEN 1 
     ELSE MAX(tn.order_column_name)+1 END
     AS order_column_name FROM table_name tn
     ORDER BY tn.order_column_name DESC LIMIT 1)
);
于 2013-04-09T18:00:03.180 に答える