2017-03-07 45 views
0

我從數據庫中拉出多行信息時遇到問題。我創建和填充數據庫這樣的:程序不會從數據庫中拉出多行

String KREIRAJ_TABELU = "CREATE TABLE " + IME_TABELE + "(" 
     + ID + " INTEGER PRIMARY KEY," + PITANJE + " TEXT," 
     + PRVI_NETACAN + " TEXT," + DRUGI_NETACAN + " TEXT," + TRECI_NETACAN + " TEXT," + TACAN_ODGOVOR + " TEXT" + ")"; 
     db.execSQL(KREIRAJ_TABELU); 
     String dodajPitanjaIOdgovore = "INSERT INTO pitanja (ID,PITANJE,PRVI_NETACAN,DRUGI_NETACAN,TRECI_NETACAN,TACAN_ODGOVOR)\n" + 
       "VALUES (0,\"Ovo je prvo pitanje:\",\"Netacan odgovor\",\"Netacan odgovor\",\"Netacan odgovor\",\"Tacan odgovor\");\n" + 
       "\n" + 
       "INSERT INTO pitanja (ID,PITANJE,PRVI_NETACAN,DRUGI_NETACAN,TRECI_NETACAN,TACAN_ODGOVOR)\n" + 
       "VALUES (1,\"Ovo je drugo pitanje:\",\"Netacan odgovor\",\"Netacan odgovor\",\"Netacan odgovor\",\"Tacan odgovor\");\n" + 
       "\n" + 
       "INSERT INTO pitanja (ID,PITANJE,PRVI_NETACAN,DRUGI_NETACAN,TRECI_NETACAN,TACAN_ODGOVOR)\n" + 
       "VALUES (2,\"Ovo je trece pitanje:\",\"Netacan odgovor\",\"Netacan odgovor\",\"Netacan odgovor\",\"Tacan odgovor\");\n" + 
       "\n" + 
       "INSERT INTO pitanja (ID,PITANJE,PRVI_NETACAN,DRUGI_NETACAN,TRECI_NETACAN,TACAN_ODGOVOR)\n" + 
       "VALUES (3,\"Ovo je cetvrto pitanje:\",\"Netacan odgovor\",\"Netacan odgovor\",\"Netacan odgovor\",\"Tacan odgovor\");\n" + 
       "\n" + 
       "INSERT INTO pitanja (ID,PITANJE,PRVI_NETACAN,DRUGI_NETACAN,TRECI_NETACAN,TACAN_ODGOVOR)\n" + 
       "VALUES (4,\"Ovo je peto pitanje:\",\"Netacan odgovor\",\"Netacan odgovor\",\"Netacan odgovor\",\"Tacan odgovor\");\n" + 
       "\n" + 
       "INSERT INTO pitanja (ID,PITANJE,PRVI_NETACAN,DRUGI_NETACAN,TRECI_NETACAN,TACAN_ODGOVOR)\n" + 
       "VALUES (5,\"Ovo je sesto pitanje:\",\"Netacan odgovor\",\"Netacan odgovor\",\"Netacan odgovor\",\"Tacan odgovor\");\n" + 
       "\n" + 
       "INSERT INTO pitanja (ID,PITANJE,PRVI_NETACAN,DRUGI_NETACAN,TRECI_NETACAN,TACAN_ODGOVOR)\n" + 
       "VALUES (6,\"Ovo je sedmo pitanje:\",\"Netacan odgovor\",\"Netacan odgovor\",\"Netacan odgovor\",\"Tacan odgovor\");\n" + 
       "\n" + 
       "INSERT INTO pitanja (ID,PITANJE,PRVI_NETACAN,DRUGI_NETACAN,TRECI_NETACAN,TACAN_ODGOVOR)\n" + 
       "VALUES (7,\"Ovo je osmo pitanje:\",\"Netacan odgovor\",\"Netacan odgovor\",\"Netacan odgovor\",\"Tacan odgovor\");\n" + 
       "\n" + 
       "INSERT INTO pitanja (ID,PITANJE,PRVI_NETACAN,DRUGI_NETACAN,TRECI_NETACAN,TACAN_ODGOVOR)\n" + 
       "VALUES (8,\"Ovo je deveto pitanje:\",\"Netacan odgovor\",\"Netacan odgovor\",\"Netacan odgovor\",\"Tacan odgovor\");\n" + 
       "\n" + 
       "INSERT INTO pitanja (ID,PITANJE,PRVI_NETACAN,DRUGI_NETACAN,TRECI_NETACAN,TACAN_ODGOVOR)\n" + 
       "VALUES (9,\"Ovo je deseto pitanje:\",\"Netacan odgovor\",\"Netacan odgovor\",\"Netacan odgovor\",\"Tacan odgovor\");"; 
     db.execSQL(dodajPitanjaIOdgovore); 

爲了得到數據庫值我創造了這個方法:

public podaciOPitanjima getPitanje(int id){ 
    SQLiteDatabase db = this.getReadableDatabase(); 
    Cursor cursor = db.query(IME_TABELE, new String[]{ID, PITANJE, PRVI_NETACAN, DRUGI_NETACAN, TRECI_NETACAN, TACAN_ODGOVOR}, ID + "=?", new String[]{String.valueOf(id)}, null, null, null, null); 
    podaciOPitanjima podaci = null; 
    if (cursor.moveToFirst()) { 
     podaci = new podaciOPitanjima(Integer.parseInt(cursor.getString(0)), cursor.getString(1), cursor.getString(2), cursor.getString(3), cursor.getString(4), cursor.getString(5)); 
    } 
    return podaci; 
} 

當我想要把所有10行我使用這段代碼:

private static List<podaciOPitanjima> pitanja = new ArrayList<podaciOPitanjima>(); 
    for(int i = 0; i < 10; i++){ 
     testPitanje = db.getPitanje(i); 
     if(testPitanje != null){ 
      pitanja.add(testPitanje); 
     } 
    } 

它正在工作,它拉着第一個ID的行放入我的動態數組中,但只是第一行,而不是全部10.爲什麼?

+0

請顯示完整示例。所有代碼都必須在類中的方法中,就像在實際代碼中一樣。還要確保包含所有變量聲明。 –

+0

我建議直接使用遊標而不是將數據放入列表中。如果您在ListView中顯示數據,則應該使用CursorAdapter而不是ArrayAdapter。 –

+1

這是將記錄加載到數組中的不好的方法,爲什麼要爲數據庫查詢1條記錄10次,獲取全部數據,並將整個數組填滿1次! – Yazan

回答

0

documentation of execSQL()說:

執行一個 SQL語句

所以,你必須insert multiple rows with a single statement,或致電execSQL()爲每個語句。 (或者撥打insert()ship your app with a pre-filled database file。)

+0

請檢查我的編輯 – someRandomSerbianGuy

+0

在回答問題後不要更改問題。如果你想知道爲什麼代碼沒有被執行,請問一個新的問題(它將作爲http://stackoverflow.com/questions/21881992/when-is-sqliteopenhelper-oncreate-onupgrade-run的副本關閉) 。 –

相關問題