0

データベースに接続されている登録フォームが 1 つあります。レコードを挿入すると、最近のレコードがテーブルの最初に表示されます。最近のレコードが最後に入力されたレコードの下に表示されるようにします。手伝ってくれませんか?

long flag = 0;
int id = 1;
SQLiteDatabase db = helper.getWritableDatabase();
Cursor cursor = db.query("tbl_countries", new String[]{"count(*) phone"}, null, null, null, null, null);
while(cursor.moveToNext())
{
    int idFromDatabase = cursor.getInt(cursor.getColumnIndex("phone"));
    if(idFromDatabase != 0)
    {
        id = 1 + idFromDatabase;
    }
}
ContentValues values = new ContentValues();
//values.put("ID", id);
values.put("phone", Long.parseLong((phone.getText().toString())));
values.put("fname", fnametxt.getText().toString().trim());
values.put("lname", lnametxt.getText().toString().trim());
if(male.isChecked())
{
    values.put("gender","male");
}
else
values.put("gender", "Female");
values.put("email", emailtxt.getText().toString());
values.put("mainpin",pin1.getText().toString()+pin2.getText().toString()+pin3.getText().toString()+pin4.getText().toString());                  
flag = db.insert("tbl_countries", null, values);
if(flag != -1)
{
    Toast toast = Toast.makeText(getApplicationContext(), "You have successful inserted this record into database! "+flag, Toast.LENGTH_LONG); 
    toast.show();
    db.close();
    return;
}
else
{
    Toast toast = Toast.makeText(getApplicationContext(), "An error occured when insert this record into database!", Toast.LENGTH_LONG); 
    toast.show();
    db.close();
    return;
}

私のコードに何か問題がある場合は、私に提案してください。

4

3 に答える 3

1

あなたの問題は、レコードの挿入ではなく、検索にあります。

厳密に言えば、データベース内のデータには順序がありません。ソートされずに取得されるか、指定した基準に従ってソートされます。

この場合、日付フィールドまたは場合によっては ID で並べ替えて、必要な順序を取得します。

于 2012-04-13T12:13:49.227 に答える
0

SQL 標準は、取得時に以前に挿入されたレコードの特定の順序を保証しません。これは、これらのレコードが予測可能な順序で表示されている場合でも、警告なしにいつでも変更される可能性があることを意味します。問題の DBMS は、ある時点でストレージの最適化を決定し、進行中にレコードを並べ替える場合があります。これは完全に合法的な動作であり、そのための準備が必要です。信頼できる一貫した順序でレコードを取得する唯一の方法はORDER BY、検索クエリで句を使用することです (驚きです!)。テーブル内のデータには順序が定義されていません。取得したときにのみ順序付けられます。

挿入順にデータを表示する場合は、自動インクリメント列を使用して並べ替えることを検討してください (最も古いものから順に昇順、または新しいものから順に並べ替えます)。

TL;DR: SQL では挿入順序は無意味です。データを並べ替えたい場合は、 を使用しますSELECT ... ORDER BY

于 2012-04-13T12:22:04.727 に答える
0

できることは、登録テーブルに id (自動インクリメント) 列を指定し、その時点でデータをクエリするときに、id 列の昇順でデータを取得することです。

于 2012-04-13T12:29:45.647 に答える