2012-04-13 9 views
0

を逆に私がdatabase.Whenに接続された1つの登録フォームを持っている私は、最近のレコードが、最近のレコードが最後に入力したレコードの下に登場することにしたいtable.Iに最初に来るのレコードを挿入します。 私を助けてくれますか?挿入するデータは、道

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'を作る場合、あなたは手動であなたがやっているように見える方法を生成する必要はありません。 –

+0

ORDER BY _id DESC? – njzk2

答えて

0

は、あなたの登録テーブル にID(自動インクリメント)の列を与え、あなたはその時点であなたのデータを照会する際にID列 のthatsそれを昇順にそれを得るです。

1

あなたの問題は、レコードの挿入ではなく、検索による問題です。

厳密に言えば、データベースのデータには順序がありません。ソートされずに検索されるか、指定した条件に基づいてソートされます。あなたが欲しい順序を取得するには、日付フィールド、または多分IDでソートしたいと思います。この場合

+0

SQLite Browserを使って、テーブルのレコードを見ました。今挿入されたレコードは、以前に挿入されたレコードよりも表示されます。 – swanand

+0

それは単なる理論ではありません。途中で行を削除し始めると、データベースによっては、ある時点で順序の不一致が挿入されることになります。 – tdammers

+0

@tdammers右ですが、ディスク上の実際のファイルにはまだ注文があります。それはランダム(または一見そうかもしれません)かもしれません。理論的には、DBを指定しない場合は、クエリごとに異なる順序でレコードを返すことができます。それはもちろん理論ですが、実際にはおそらくディスク上のレコードの順序を使用します。 –

0

SQL標準では、検索時に、以前に挿入されたレコードのいずれかの特定の順序を保証するものではありません。これは、予測可能な注文のようなものでそれらのレコードを見ているかもしれませんが、これは何の警告もなくいつでも変更できることを意味します。問題のDBMSは、ある時点でストレージの断片化を解消し、進行状況の記録を並べ替えることを決定する可能性があります。これは完全に合法的な行為であり、そのために準備する必要があります。信頼できる一貫した順序でレコードを取得する唯一の方法は、検索クエリーにORDER BY句を使用する場合です(驚きです)。テーブル内のデータには定義された順序はありません。

あなたは挿入の順序でデータを表示したい場合は、(最初​​の最古の一覧を表示するために昇順、または最新の最初のために降順のいずれか)ということで、自動インクリメント列と順序を使用することを検討してください。

TL; DR:挿入順序はSQLに無意味です。データを注文する場合は、SELECT ... ORDER BYを使用してください。あなたは何ができるか