2012-04-13 87 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