2015-10-05 51 views
0

查詢我有以下表方案打印正確sqllite機器人

public final class FeedReaderContract { 
// To prevent someone from accidentally instantiating the contract class, 
// give it an empty constructor. 
public FeedReaderContract() { 
} 

/* Inner class that defines the table contents */ 
public static abstract class FeedEntry implements BaseColumns { 
    public static final String TABLE_NAME = "entry"; 
    public static final String COLUMN_NAME_ENTRY_ID = "entryid"; 
    public static final String COLUMN_NAME_TITLE = "title"; 
} 

}

,我初始化表具有以下功能

public void put_info(){ 
    SQLiteDatabase db = mDbHelper.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 
    int id = 999; 
    String title = "Sophia"; 
    values.put(FeedReaderContract.FeedEntry.COLUMN_NAME_ENTRY_ID, id); 
    values.put(FeedReaderContract.FeedEntry.COLUMN_NAME_TITLE, title); 

    long newRowId; 
    newRowId = db.insert(
      FeedReaderContract.FeedEntry.TABLE_NAME, 
      null, 
      values); 

} 

我儘量讓請求像這樣:

Cursor cursor = db.query(
      FeedReaderContract.FeedEntry.TABLE_NAME, // The table to query 
      projection,        // The columns to return 
      null,        // The columns for the WHERE clause 
      null,       // The values for the WHERE clause 
      null,          // don't group the rows 
      null,         // don't filter by row groups 
      sortOrder         // The sort order 
    ); 

其中

 String[] projection = { 
      FeedReaderContract.FeedEntry._ID, 
      FeedReaderContract.FeedEntry.COLUMN_NAME_TITLE, 
    }; 

然後我嘗試打印查詢以下列方式:

 String result = ""; 

    int iRow = cursor.getColumnIndex(FeedReaderContract.FeedEntry._ID); 
    int iName = cursor.getColumnIndex(FeedReaderContract.FeedEntry.COLUMN_NAME_TITLE); 
for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()){ 
     result = result + cursor.getString(iRow) + " " + cursor.getString(iName) + "\n"; 
    } 
    System.out.println(result); 

我的問題是,我得到這樣

10-05 03:04:55.005 19717-19717/com.mycompany.antibes I/System.out: 1 title 
10-05 03:04:55.005 19717-19717/com.mycompany.antibes I/System.out: 2 Sophia 
10-05 03:04:55.005 19717-19717/com.mycompany.antibes I/System.out: 3 Sophia 
10-05 03:04:55.005 19717-19717/com.mycompany.antibes I/System.out: 4 Sophia 
10-05 03:04:55.005 19717-19717/com.mycompany.antibes I/System.out: 5 Sophia 
10-05 03:04:55.005 19717-19717/com.mycompany.antibes I/System.out: 6 Sophia 
10-05 03:04:55.005 19717-19717/com.mycompany.antibes I/System.out: 7 Sophia 
10-05 03:04:55.005 19717-19717/com.mycompany.antibes I/System.out: 8 Sophia 
10-05 03:04:55.005 19717-19717/com.mycompany.antibes I/System.out: 9 Sophia 
10-05 03:04:55.005 19717-19717/com.mycompany.antibes I/System.out: 10 Sophia 
10-05 03:04:55.005 19717-19717/com.mycompany.antibes I/System.out: 11 Sophia 
10-05 03:04:55.005 19717-19717/com.mycompany.antibes I/System.out: 12 Sophia 
10-05 03:04:55.005 19717-19717/com.mycompany.antibes I/System.out: 13 Sophia 
10-05 03:04:55.005 19717-19717/com.mycompany.antibes I/System.out: 14 Sophia 
10-05 03:04:55.005 19717-19717/com.mycompany.antibes I/System.out: 15 Sophia 
10-05 03:04:55.005 19717-19717/com.mycompany.antibes I/System.out: 16 Sophia 
10-05 03:04:55.005 19717-19717/com.mycompany.antibes I/System.out: 17 Sophia 
10-05 03:04:55.005 19717-19717/com.mycompany.antibes I/System.out: 18 Sophia 

一個奇怪的輸出,同時我想我的輸出如下:

title 
999 
sophia 

這也是我期望從我的查詢,因爲我的數據庫做只有一排 和要求應該給我回的所有行 (因爲在這裏我選擇了行參數爲空)。

我不明白爲好一系列的數字從1到18的輸出,我沒有看到在代碼中這可以來自任何方式。 任何想法?

+1

進行調試使用'DatabaseUtils#dumpCursor' – pskink

+0

哪裏'iRow'從何而來? –

+0

你能給我一個很好的參考嗎?我在網上找不到很多 – Helios83

回答

1
values.put(FeedReaderContract.FeedEntry.COLUMN_NAME_ENTRY_ID, id); 
... 
int iRow = cursor.getColumnIndex(FeedReaderContract.FeedEntry._ID); 

這是一個不同的列。
(這是不是有兩個不同的密鑰是一個好主意。你可能要下降entryid和使用_id代替。)

你得到17個Sophias因爲你叫put_info()十七次。

+0

是的,這是真的,但我叫put_info()在創建我的應用程序。所以我希望每次打電話給應用程序時數據庫都是新的。 – Helios83

0

其實我覺得我瞭解了一下這個問題。事實是,每次我再次啓動應用程序時,查詢的結果將會更多。 這意味着我的數據庫保存在內存中,並且在每次啓動應用程序後都不會銷燬。所以現在我的問題是如何在每次運行應用程序時創建一個新的數據庫。我應該在哪裏修改我的代碼?

+0

數據庫的重點在於保存數據。並提出一個問題。使用「Ask Question」按鈕。 –

+0

@CL。好吧,只有當我重新安裝我的應用程序時,纔會創建一個新的數據庫,否則每次重新啓動後它都會保存在內存中。謝謝 :) – Helios83