2012-09-19 28 views
0

我正試圖在我的數據庫中的某個表的列中查找最大數量。無法查詢數據庫中的最大數量

我原本以爲這個排序(我以前張貼類似的問題),但是經過一些測試我已經意識到我的代碼不能正常工作,因爲我以爲。

該數據庫由一個表的有以下的列:

_id,inspection_link,area_number,area_reference

我已經在我的數據庫輔助類創建了下面的代碼:

public static final String AREAS_TABLE = "areas"; 
public static final String AREA_ID = "_id"; 
public static final String AREA_NUMBER = "area_number"; 
public static final String AREA_REF = "area_reference"; 
public static final String AREA_LINK = "area_link"; 
public static final String INSPECTION_LINK = "inspection_link"; 

public Cursor 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); 


    if (c != null) { 
     c.moveToFirst(); 
    } 
    c.close(); 
    return c; 
} 

然後在活動中,我想查詢我寫的數據庫以下內容:

public class AreaEdit extends Activity { 

private EditText AreaNumber; 
private EditText AreaReference; 
private Button saveButton; 
private Button cancelButton; 
protected boolean changesMade; 
private AlertDialog unsavedChangesDialog; 


private RMDbAdapter rmDbHelper; 
private long inspectionId; 
private long areaId; 
private int nextAreaNumber = 0; 

@Override 
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) { 
     Cursor c = rmDbHelper.selectMaxAreaNumber(inspectionId); 
     startManagingCursor(c); 
     c.moveToFirst(); 
     nextAreaNumber = c.getInt(c.getColumnIndex("max")) + 1; 
    } 
    setContentView(R.layout.edit_area); 
    setUpViews(); 
    populateFields(); 
    setTextChangedListeners(); 
} 

private void setUpViews() { 
    AreaNumber =(EditText)findViewById(R.id.area_number); 
    AreaReference =(EditText)findViewById(R.id.area_reference); 
    saveButton = (Button)findViewById(R.id.area_save_button); 
    cancelButton = (Button)findViewById(R.id.area_cancel_button); 


} 

    private void populateFields() { 
     if (areaId > 0) { 
      Cursor c = rmDbHelper.fetchArea(areaId); 
      startManagingCursor(c); 
      c.moveToFirst(); 
      AreaNumber.setText(c.getString(
        c.getColumnIndexOrThrow(RMDbAdapter.AREA_NUMBER))); 
      AreaReference.setText(c.getString(
        c.getColumnIndexOrThrow(RMDbAdapter.AREA_REF))); 
      c.close(); 
     } 
     else { 
      AreaNumber.setText(String.valueOf(nextAreaNumber)); 
     } 
    } 

但是,當它返回錯誤的數字時 - 它似乎從整個表格中提取出包含其他檢查數據的最大數量。

我想這可能是由於字符串和longs等之間的轉換可能,但我有這樣的磚牆?

任何幫助非常感謝。

回答

0

你可以簡單地嘗試如下:

String sql = "SELECT MAX(ColumnNameHere) AS MaxValue FROM myTable WHERE AnotherColumn = 'SomValue'"; 
Cursor c = db.rawQuery(sql, null); 
c.moveToFirst(); 
c.getInt(c.getColumnIndex("MaxValue")); 
+0

我一直建議使用更復雜的數據庫查詢,如圖所示,它應該確實做同樣的事情?然而,我確實採用了稍微不同的SELECT語句,並改寫了我的語句來匹配看看是否有效,但沒有成功。我試圖理解爲什麼我的不工作 - 你知道SELECT語句嗎? – Scamparelli