0

我有一个连接到数据库的注册表单。当我插入记录时,最近的记录在表中排在第一位。我希望最近的记录出现在最后输入的记录下方。你能帮我吗?

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 回答