2012-09-05 103 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(名称)