2013-05-09 122 views
0

我试图用Cursor从我的数据库中获取一些值。 我的问题是,当我尝试从我的数据库中获取值我的光标越界。 我确定我想要的值存在于数据库中,因为我有其他方法可以获取这些值。 我想从COLUMN_FIELDS_PARAMETER游标无法从数据库中获取值

日志猫获得的价值:

05-09 11:24:17.872: E/AndroidRuntime(4113): FATAL EXCEPTION: main 
05-09 11:24:17.872: E/AndroidRuntime(4113): android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0 
05-09 11:24:17.872: E/AndroidRuntime(4113):  at android.database.AbstractCursor.checkPosition(AbstractCursor.java:424) 

这里是我的代码: 把值:

public void putParameters(int[] parameters, String exercise) { 

    String parametersList = ""; 

    for(int i = 0; i < parameters.length; i++){ 

     if (parameters[i] != 0) 
     { 
      parametersList = parametersList + " " + parameters[i]; 
     } 
    } 

    ContentValues cv = new ContentValues(); 
    cv.put(COLUMN_FIELDS_PARAMETER, parametersList); 
    cv.put(COLUMN_EXERCISE, exercise); 

    String whereClause = COLUMN_FIELDS_PARAMETER + "= ? and " + COLUMN_EXERCISE + "= '" + exercise + "'"; 
    String[] columns = new String[]{COLUMN_EXERCISE, COLUMN_FIELDS_PARAMETER}; 

    Cursor c = ourDatabase.query(TABLE_NAME, columns, whereClause , null, null, null, null, null); 

    if(c == null) 
     ourDatabase.insert(TABLE_NAME, null, cv); 
    else 
     ourDatabase.update(TABLE_NAME, cv, whereClause, null); 
} 



    public String getParameters(String exercise){ 

    String foo = ""; 

    String whereClause = COLUMN_FIELDS_PARAMETER + "= ? and " + COLUMN_EXERCISE + "= '" + exercise + "'"; 
    String[] columns = new String[]{COLUMN_EXERCISE, COLUMN_FIELDS_PARAMETER}; 

    Cursor c = ourDatabase.query(TABLE_NAME, columns, whereClause , null, null, null, null); 

    int parameter = c.getColumnIndex(COLUMN_FIELDS_PARAMETER); 

     if (c != null) 
     { 
      c.moveToFirst(); 
      foo = c.getString(parameter); 
      return foo; 
     } 

    return foo; 
} 
+0

考虑一件事'query'不会再回来'如果(c.moveToFirst()){}'然后从'cursor'得到值 – Pragnani 2013-05-09 11:47:54

回答

0

你错过了,随着而来的whereParameterswhereClause。 试试这个:

String whereClause = COLUMN_FIELDS_PARAMETER + "= ? and " + COLUMN_EXERCISE + "= '?'"; 
String[] whereParams = {field, exercise}; 

Cursor c = ourDatabase.query(TABLE_NAME, columns, whereClause , whereParams, null, null, null); 

注意,whereClause有两个?。对于每一个你需要提供一个值,在字符串[] whereParams并将其传递给查询。 它所做的是substitue每个?正确的值(在上面fieldexercise的例子,这样可以保护你免受SQL注入(使用户无法进入exercise SQL命令。

+0

用哪种方法放它? – tomer 2013-05-09 11:59:58

+0

在两者都是空的时候,它可能是空的。 。每当你使用SQL的'WHERE'子句,那么使用它的方式就像我所说的那样。你需要'子句',它是带变量占位符的格式(用'?'标记),然后是变量。 – tbkn23 2013-05-09 13:47:33

+0

但是当我想从COLUMN_FIELDS_PARAMETER获取数据时,我不知道那里有什么值,t讨论我的方法。 所以我把它放在“whereParams”? – tomer 2013-05-09 15:55:53