Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 反向插入数据库中的数据_Android_Sqlite - Fatal编程技术网

Android 反向插入数据库中的数据

Android 反向插入数据库中的数据,android,sqlite,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); whil

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

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

如果我的代码有任何错误,请告诉我。

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

严格地说,数据库中的数据没有顺序。它是按未排序的方式检索的,或者根据您指定的任何条件进行排序


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

SQL标准不保证在检索之前插入的记录时有任何特定的顺序。这意味着,即使您可能会以可预测的顺序看到这些记录,但这可能会在任何时候发生变化,而不会发出任何警告。有问题的DBMS可能会在某个时候决定对其存储进行碎片整理,并在整理过程中对记录进行重新排序——这是完全合法的行为,您必须为此做好准备。以可靠一致的顺序获取记录的唯一方法是在检索查询中使用(令人惊讶!)一个
orderby
子句。表中的数据没有定义的顺序,只有在检索时才会对其进行排序

如果要按插入顺序显示数据,请考虑使用自动增量列和顺序(要么升至最老的第一个列表,要么降序为最新的第一个)。


TL;DR:插入顺序在SQL中没有意义;如果您希望对数据进行排序,请使用
选择。。。订单依据

您可以做的是在注册表中指定id(自动递增)列 当您当时查询数据时,按id列的升序获取数据
就是这样。

如果你让你的
id
自动递增
,你不需要像你看起来那样手动生成它。我使用SQLite浏览器看到了表中的记录。刚才插入的记录比以前插入的记录显示得早。你知道,这不仅仅是理论。一旦你开始删除中间的行,几乎任何数据库都会在某一点开始插入无序。@ TdMaMes是正确的,但是在磁盘上的实际文件中仍然有一个订单。不过,这可能是随机的(或者看起来是随机的)。理论上,如果不指定记录,DB可以按不同的顺序返回每个查询的记录。当然,这是理论,在实践中,他们可能会使用磁盘上记录的顺序。@KristofProvost:并不是所有的引擎都在磁盘上存储数据,而且大多数引擎都有一些维护工作,比如碎片整理或重建索引。有些DBMS有一个“聚集索引”,它允许您强制在磁盘上对记录进行排序,但除此之外,任何插入或删除都可能会扰乱您的排序。