如何从单个字段将数据从SQLite数据库中获取到变量中?

时间:2011-01-11 13:09:10

标签: java android database sqlite cursor

我正在开发我的第一个Android应用程序,并设置了SQLite数据库并使用它,我已经能够成功使用游标来检索一些数据并使用SimpleCursorAdapter使数据显示为列表。

我现在正在寻找检索特定字段将结果放入浮点变量。然而,我在网上找到的所有示例似乎都希望您处理具有多行/列的大型检索,并且它们都已经被调整为列表或数组。 我无法弄清楚如何将该字段的内容转换为变量。

我尝试使用myVariable = cursor.getFloat(0),我认为这是正确的行,但我也无法做到这一点。

每次运行我的应用程序时我都会遇到null pointer exception错误,我尝试了一些try catch块,但我对这一切都是新手并没有在故障排除方面取得任何成功。它可能是一个简单的查询拼写错误..

我将在下面提供一些代码,但欢迎任何一般或具体的建议,感谢您抽出时间来查看。

public void Main(){

    //gets the rowId we put with the intent from Budget.java, sets a default value of -1 'incase.
    selectedRowId = getIntent().getLongExtra("rowId", -1);
    Cursor costCursor= FindBudgetForId(selectedRowId);
    MyText(costCursor, selectedRowId);

}

public Cursor FindBudgetForId(long selectedRowId){

    SQLiteDatabase db = budgetData.getWritableDatabase();
    String rowBudgetQuery = "SELECT BUDGET_AMOUNT FROM CAT_BUD_TAB WHERE _ID="+ selectedRowId;
    Cursor c = db.rawQuery(rowBudgetQuery,null);
    startManagingCursor(c); 
    return c;


}

public void MyText(Cursor costCursor, long selectedRowId){      
    TextView whatDoText=(TextView)this.findViewById(R.id.keypad_text);
    whatDoText.setText("row: " +(String.valueOf(selectedRowId)));
    //set the current  budget amount in the edit text box
    retrievedAmount = costCursor.getFloat(3);
    EditText inputHint=(EditText)this.findViewById(R.id.cost_input);
    inputHint.setText((String.valueOf(retrievedAmount)));

}

2 个答案:

答案 0 :(得分:4)

我相信当SqliteDatabase#rawQuery返回一个Cursor时,它最初位于之前第一个结果。因此,为了从您获得的结果中实际读取值(不获取NullPointerExceptionExplosionDeath),请在获取浮点数之前调用cursor.moveToFirst()。我以前一直被它咬了。

答案 1 :(得分:1)

您可以获得

等数据
    Cursor c =//Query;
    int numRows = c.getCount();
if (numRows > 0) 
    {
    c.moveToFirst();
    While(numRows>0) // or for loop
    {
          String strName = c.getString(0);
              Int i = c.getInt(1);
              numRows--;
    }       
    }