2012-04-13 94 views
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; 
} 

如果在我的代码中有任何错误,请建议我。

+1

如果你使'id'列'AUTOINCREMENT',你不需要手动生成它,你似乎在做什么。 – 2012-04-13 12:15:59

+0

ORDER BY _id DESC? – njzk2 2012-04-13 12:18:37

回答

0

你可以做什么是你的注册表格 给ID(自动递增)列,当你在那个时候查询数据通过id列 完蛋了升序得到它。

1

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

严格理论上数据库中的数据没有顺序。它被检索为未排序,或根据您指定的任何标准进行排序。

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

+0

我通过使用SQLite浏览器在表中看到了记录。现在插入的记录显示为比以前插入的记录更重要。 – swanand 2012-04-13 12:16:31

+0

这不只是理论,你知道。一旦你开始删除中间的行,几乎任何数据库都会在某个时候开始无序地插入。 – tdammers 2012-04-13 12:16:53

+0

@tdammers对,但在磁盘上的实际文件中仍然有一个订单。不过,它可能是随机的(或者貌似如此)。理论上,如果您没有指定数据库,则允许DB以不同顺序为每个查询返回记录。这当然是理论,实际上他们可能会使用磁盘上记录的顺序。 – 2012-04-13 12:21:06

0

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

如果要按插入顺序显示数据,请考虑使用自动增量列并按顺序排列(升序列出最早的第一个,或者先降序排列最新的第一个)。

TL; DR:插入顺序在SQL中没有意义;如果您希望订购数据,请使用SELECT ... ORDER BY