2016-05-14 37 views
3

返回一個int結果所以我想找到的最大的ID,並通過添加1從SQLite的

以下是我在提供SQLHelper代碼返回。它看起來很錯,因爲它的公共無效,但我返回了CR。林有點困惑,因爲光標用於讀取記錄,但我只想要使用SQL查詢返回整數的結果。

public int getID(String name){ 
    String idquery="SELECT IFNULL(MAX(id),0)+1 FROM "+TableInfo.TABLE_NAME+ " WHERE appliance="+name; 
    SQLiteDatabase SQ=this.getReadableDatabase(); 
    Cursor CR=SQ.rawQuery(idquery,null); 
    return CR; 
} 

這是我如何把它從另一個活動

int no_id=DB.getID(name); 

有人請幫助我。謝謝。

+0

你回來之前,訪問光標檢查是否有任何行。如果存在,訪問第一列以通過CR.getInt(0)檢索您的ID,假設它是唯一的列,因此它將是索引0.返回檢索的值而不是整個光標。 –

回答

1

你所要做的,如:

public int getID(String name){ 

    String idquery="SELECT IFNULL(MAX(id),0)+1 FROM "+TableInfo.TABLE_NAME+ " WHERE appliance="+name; 

    SQLiteDatabase SQ=this.getReadableDatabase(); 
    Cursor CR=SQ.rawQuery(idquery,null); 


    int id = -1; 

    if (CR != null && CR.getCount() > 0) { 
     CR.moveToFirst(); 
     id = CR.getInt(c.getColumnIndex(YOUR_COLUMN_NAME)); 
     CR.close(); 
    } 
    return id; 
} 

編輯:

更改您的列alias查詢IFNULL(MAX(id),0)+1IFNULL(MAX(id),0)+1 as maxcount,那麼你可以給它,而從光標所在值:

id = CR.getInt(c.getColumnIndex("maxcount")); 

它會根據需要返回Integer。

希望它能幫助你。

+0

這條線做了什麼'id = CR.getInt(c.getColumnIndex(YOUR_COLUMN_NAME));'?因爲返回的結果沒有任何列。 – whoami

+0

以'IFNULL(MAX(id),0)+1作爲maxcount'並將其作爲列名, –

+0

這意味着我有一個名爲maxcount的列取'IFNULL(MAX(id),0)+ 1'?我是否可以簡單地執行查詢並將其值存入函數中? – whoami

1

嘗試這個

public int getMaxID(){ 
    int maxID = 0; 

    String selectQuery = "SELECT "+here you primary key name +" FROM " + TableInfo.TABLE_NAME; 
    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 
    if (cursor.moveToFirst()) { 
     do{ 
      maxID = cursor.getInt(0); 

     }while(cursor.moveToNext()); 
    } 
    return cursor.getCount(); 
} 
1

如果name是一個字符串值,你必須引用它的SQL。但更好的方法是使用參數。

來讀取查詢單號,而不必淤泥與周圍的光標,有一個有用的helper function

int getID(String name) { 
    SQLiteDatabase db = getReadableDatabase(); 
    return (int)DatabaseUtils.longForQuery(db, 
      "SELECT IFNULL(MAX(id),0)+1"+ 
      " FROM "+TableInfo.TABLE_NAME+ 
      " WHERE appliance=?", 
      new String[]{ name }); 
}