以数据库反向方式插入数据

时间:2012-04-13 12:10:56

标签: android sqlite

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

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;
}

如果我的代码有任何问题,请建议我。

3 个答案:

答案 0 :(得分:1)

您的问题不是插入记录,而是检索。

理论上,数据库中的数据没有订单。它被检索未分类,或根据您指定的任何条件进行排序。

在这种情况下,您需要对日期字段或可能的ID进行排序,以获得所需的订单。

答案 1 :(得分:0)

SQL标准不保证在检索时先前插入的记录的任何特定顺序。这意味着即使您可能看到这些记录看起来像一个可预测的订单,这可能随时改变,没有任何警告。有问题的DBMS可能决定在某个时刻对其存储进行碎片整理,并对进度中的记录进行重新排序 - 这是完全合法的行为,您必须为此做好准备。以可靠的一致顺序获取记录的唯一方法是在检索查询中使用(惊奇!)ORDER BY子句。表中的数据没有定义的顺序,只有在您检索它时才会被排序。

如果要按插入顺序显示数据,请考虑使用自动增量列并按顺序排列(先升级到最旧列表,或先降序列出最新值)。

TL; DR:SQL中的插入顺序毫无意义;如果您想要订购数据,请使用SELECT ... ORDER BY

答案 2 :(得分:0)

您可以在注册表中提供id(自动增量)列 当您在那时查询数据时,按id列的升序获取它 就是这样。