2012-09-05 104 views
0

我有一個表有兩列 - 名稱和符號。我想要的只是獲得與名稱相對應的符號。我使用這種方法。它沒有任何回報。請檢查一下。問題從sqlite獲取數據android

public String getSymbol(String name) { 
    String Symbol = ""; 
    String[] columns = new String[] { "name", "symbol" }; 
    Cursor c = getReadableDatabase().query(DATABASE_TABLE_NAME, columns, null, 
      null, null, null, null); 

    int iName = c.getColumnIndex("name"); 
    int iSymbol = c.getColumnIndex("symbol"); 

    for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) { 

     if (c.getString(iName) == name) { 
      Symbol = Symbol + c.getString(iSymbol); 
     } 

    } 
    return Symbol; 

} 

回答

1

試試這個功能。

public String getSymbol(String name) 
    { 
     try 
     { 
      String Symbol = ""; 
      Cursor c = db.query(DATABASE_TABLE_NAME, columns, "name = ?" , new String[] {name}, null, null, null); 
      if(c.getCount != 0) 
      { 
       c.moveToFirst(); 
       Symbol = String.valueOf(c.getString(c.getColumnIndex("symbol"))); 
       c.close(); 
       return Symbol; 
      } 

     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 
     return null; 
    } 
+0

謝謝!代碼工作正常,除了這一行Symbol = String.valueOf(c.getColumnIndex(「symbol」));其實它應該是Symbol = String.valueOf(c.getString(c.getColumnIndex(「symbol」)));否則會返回索引「1」。 – darsh

+0

您能解釋一下我的代碼中出了什麼問題嗎?只是想弄清楚事情。 – darsh

+1

您正在嘗試獲取所有數據,然後與所有數據進行比較。它不是個好主意 –

0

而不是使用c.getString(INAME)==名同時比較,使用c.getString(INAME).equalsIgnoreCase(名稱)