10

OK、これはスパムではなく、単純なはずです。なぜ機能しないのかわかりません。これは私のコードです:

gamesdatabase = openOrCreateDatabase("GamesDatabase", MODE_PRIVATE, null);
gamesdatabase.execSQL("CREATE TABLE IF NOT EXISTS Games (ID INTEGER PRIMARY KEY, Name
VARACHAR, NPlayers INT(1), NRounds INT(2), WinScore INT(2));");

gamesdatabase.execSQL("INSERT INTO Games 
(ID, Name, NPlayers, NRounds, WinScore ) VALUES ( NULL, 'TAWLA',2,0,0 );");

gamesdatabase.execSQL("INSERT INTO Games 
(ID, Name, NPlayers, NRounds, WinScore ) VALUES ( NULL, 'DOMANA',4,0,0 );");


Cursor c = gamesdatabase.rawQuery("SELECT * FROM Games", null);
c.moveToFirst();
while (c.isAfterLast() == false) {
Log.d("BEZRA", String.valueOf(c.getInt(c.getColumnIndex("ID"))));
c.moveToNext();
}

これの何が問題なのですか?ログはすべてのレコードに対して 0 を表示します

4

6 に答える 6

28

SQLite テーブルの主キーは _id と呼ばれます。自動インクリメントであり、値を挿入しようとしないでください。

gamesdatabase = openOrCreateDatabase("GamesDatabase", MODE_PRIVATE, null);
gamesdatabase.execSQL("CREATE TABLE IF NOT EXISTS Games (_id INTEGER PRIMARY KEY, Name
VARACHAR, NPlayers INT(1), NRounds INT(2), WinScore INT(2));");

gamesdatabase.execSQL("INSERT INTO Games 
(Name, NPlayers, NRounds, WinScore ) VALUES ('TAWLA',2,0,0 );");

gamesdatabase.execSQL("INSERT INTO Games 
(Name, NPlayers, NRounds, WinScore ) VALUES ('DOMANA',4,0,0 );");


Cursor c = gamesdatabase.rawQuery("SELECT * FROM Games", null);
c.moveToFirst();
while (c.isAfterLast() == false) {
Log.d("BEZRA", String.valueOf(c.getInt(c.getColumnIndex("_id"))));
c.moveToNext();
}
于 2013-05-30T09:30:10.287 に答える
11

私にとってうまくいったのは、作成タイプの名前をINTからINTEGERに変更することで、機能し始めました。

これから:

CREATE TABLE IF NOT EXISTS foo (id INT PRIMARY KEY, bar INT)

これに:

CREATE TABLE IF NOT EXISTS foo (id INTEGER PRIMARY KEY, bar INT)
于 2016-06-02T23:38:16.097 に答える
2

c.getColumnIndex("ID") 列のインデックスを取得します。ID は 0 インデックス付き列、名前は 1 などです。

あなたが欲しい

c.getInt(c.getColumnIndex("ID"))

于 2013-05-30T09:30:13.663 に答える