2012-04-13 2 views
0

Ich habe ein Registrierungsformular, das mit der Datenbank verbunden ist.Wenn ich den Datensatz einfügen, kommt der letzte Datensatz zuerst in der Tabelle.Ich möchte, dass der letzte Datensatz unter dem zuletzt eingegebenen Datensatz angezeigt wird. Kannst du mir da draußen helfen?Einfügen von Daten in umgekehrter Datenbank

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

Bitte schlagen Sie mir vor, wenn irgendetwas in meinem Code falsch ist.

+1

Wenn Sie Ihre 'id' Spalte' AUTOINCREMENT' erstellen, müssen Sie sie nicht manuell so generieren, wie Sie es zu tun scheinen. –

+0

ORDER BY _id DESC? – njzk2

Antwort

0

Was können Sie tun, ist id (Autoinkrement) Spalte in der Registrierungstabelle und geben, wenn Sie Ihre Daten zu diesem Zeitpunkt abfragen bekommen es im Auftrag für id-Spalte das ist es steigend.

1

Ihr Problem besteht nicht beim Einfügen der Datensätze, sondern beim Abruf.

Streng theoretisch haben Daten in einer Datenbank keine Reihenfolge. Es wird unsortiert abgerufen oder nach den von Ihnen angegebenen Kriterien sortiert.

In diesem Fall möchten Sie nach einem Datumsfeld oder möglicherweise der ID sortieren, um die gewünschte Reihenfolge zu erhalten.

+0

Ich sah die Datensätze in Tabelle mithilfe von SQLite-Browser. Der Datensatz, der gerade eingefügt wird, wird vor dem vorherigen eingefügten Datensatz angezeigt. – swanand

+0

Es ist nicht nur Theorie, weißt du. Sobald Sie beginnen, Zeilen in der Mitte zu löschen, beginnt so ziemlich jede Datenbank irgendwann, Out-of-Order einzufügen. – tdammers

+0

@ tdammers Richtig, aber in der eigentlichen Datei auf der Festplatte gibt es noch eine Bestellung. Es könnte zufällig (oder scheinbar so) sein. Theoretisch darf die DB die Datensätze für jede Abfrage in einer anderen Reihenfolge zurückgeben, wenn Sie keine angeben. Das ist natürlich Theorie, in der Praxis werden sie wahrscheinlich die Reihenfolge der Datensätze auf der Festplatte verwenden. –

0

Der SQL-Standard garantiert keine bestimmte Reihenfolge für zuvor eingefügte Datensätze beim Abruf. Dies bedeutet, dass, obwohl Sie diese Datensätze möglicherweise in einer vorhersehbaren Reihenfolge sehen, dies jederzeit ohne Vorwarnung geändert werden kann. Das fragliche DBMS kann entscheiden, seinen Speicher zu einem bestimmten Zeitpunkt zu defragmentieren und Datensätze im Verlauf neu zu ordnen - das ist völlig legales Verhalten, und Sie müssen darauf vorbereitet sein. Die einzige Möglichkeit, Datensätze in einer zuverlässigen konsistenten Reihenfolge zu erhalten, besteht darin, dass Sie (Überraschung!) Eine ORDER BY-Klausel in Ihrer Abfrage verwenden. Daten in der Tabelle haben keine definierte Reihenfolge, sondern werden nur beim Abrufen geordnet.

Wenn Sie Ihre Daten in der Reihenfolge ihres Einfügens anzeigen möchten, sollten Sie eine Autoinkrementspalte verwenden und nach dieser Reihenfolge sortieren (entweder aufsteigend, um die älteste zuerst aufzulisten, oder absteigend nach der neuesten zuerst).

TL; DR: Einfügereihenfolge ist in SQL bedeutungslos; Wenn Sie Ihre Daten bestellen möchten, verwenden Sie SELECT ... ORDER BY.