2012-09-09 54 views
0

我想查詢我的數據庫以查找最大的「區域號」,在我的區域表中進行某種檢查,這樣我就可以設置表單中的文本到下一個區號。未能查詢數據庫表中的最大數量

數據庫表由四列組成; _id,inpsection_link,area_number,區域引用。

我已經創建了我的數據庫輔助類以下(使用這篇文章作爲指導:SQLiteDatabase.query method):

public int selectMaxAreaNumber (long inspectionId) { 
    String inspectionIdString = String.valueOf(inspectionId); 
    String[] tableColumns = new String[] { 
      AREA_NUMBER, 
      "(SELECT max(" + AREA_NUMBER + ") FROM " + AREAS_TABLE + ") AS max" 
     }; 
    String whereClause = INSPECTION_LINK + " = ?"; 
    String[] whereArgs = new String[] { 
      inspectionIdString   
     }; 
    Cursor c = rmDb.query(AREAS_TABLE, tableColumns, whereClause, whereArgs, 
      null, null, null); 
    int maxAreaNumber = c.getColumnIndex("max"); 
    return maxAreaNumber; 
} 

然後我在areaEdit類調用如下:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    rmDbHelper = new RMDbAdapter(this); 
    rmDbHelper.open(); 
    Intent i = getIntent(); 
    inspectionId = i.getLongExtra("Intent_InspectionID", -1); 
    areaId = i.getLongExtra("Intent_AreaID", -1); 
    if (areaId == -1) { 
     nextAreaNumber = rmDbHelper.selectMaxAreaNumber(inspectionId) + 1; 
     Toast.makeText(getApplicationContext(), String.valueOf(nextAreaNumber), 
       Toast.LENGTH_LONG).show(); 
    } 
    setContentView(R.layout.edit_area); 
    setUpViews(); 
    populateFields(); 
    setTextChangedListeners(); 
} 

但是,它每次只返回1(即使數字高於存儲在數據庫中的數字)。

Confused.com !!任何幫助非常感謝。

回答

2

你的問題就在這裏:

int maxAreaNumber = c.getColumnIndex("max"); 

你得到的max列索引,這是因爲你只需要在查詢一列。 相反,做這樣的事情:

int maxAreaNumber = 0; 
if(c.moveToFirst()) 
{ 
    maxAreaNumber = c.getInt(1); 
    // or cleaner 
    maxAreaNumber = c.getInt(c.getColumnIndex("max")); 
} 
else 
    // no data in cursor 
+0

嗨florianmski,感謝您的答覆,但沒有工作 - 我得到了CursorIndexOutOfBoundsException:指數-1要求,大小爲4 – Scamparelli

+0

@Scamparelli我已經更新了我的答案,不要忘記cursor.moveToFirst()方法! – florianmski

+0

非常感謝,除了表格中沒有數據之外,現在似乎正在工作。我想我需要測試爲null,但它似乎並沒有讓我 - 是否有替代int?乾杯。 – Scamparelli