我有一个连接到数据库的注册表。当我插入记录时,最近的记录在表中排在第一位。我希望最近的记录出现在最后输入的记录下面。 你能帮助我吗?
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;
}
如果我的代码有任何问题,请建议我。
答案 0 :(得分:1)
您的问题不是插入记录,而是检索。
理论上,数据库中的数据没有订单。它被检索未分类,或根据您指定的任何条件进行排序。
在这种情况下,您需要对日期字段或可能的ID进行排序,以获得所需的订单。
答案 1 :(得分:0)
SQL标准不保证在检索时先前插入的记录的任何特定顺序。这意味着即使您可能看到这些记录看起来像一个可预测的订单,这可能随时改变,没有任何警告。有问题的DBMS可能决定在某个时刻对其存储进行碎片整理,并对进度中的记录进行重新排序 - 这是完全合法的行为,您必须为此做好准备。以可靠的一致顺序获取记录的唯一方法是在检索查询中使用(惊奇!)ORDER BY
子句。表中的数据没有定义的顺序,只有在您检索它时才会被排序。
如果要按插入顺序显示数据,请考虑使用自动增量列并按顺序排列(先升级到最旧列表,或先降序列出最新值)。
TL; DR:SQL中的插入顺序毫无意义;如果您想要订购数据,请使用SELECT ... ORDER BY
。
答案 2 :(得分:0)
您可以在注册表中提供id(自动增量)列 当您在那时查询数据时,按id列的升序获取它 就是这样。