开发者

How can I get data from a single field into a variable from an SQLite database?

I'm working on my first android app and have an SQLite database set up and working with it, I've been able to successfully use a cursor to retrieve some data and used SimpleCursorAdapter to make the data appear as a list.

I'm now looking to retrieve a specific field and put the result into a float variable. However all the examples i find online seem to expect you to be handling large retrievals with multiple rows/columns and they've all been adapted into lists or arrays. I can't figure out how to just get the contents of that one field into a variable.

I tried using myVariable = cursor.getFloat(0) which i think is along the right lines but i couldn't get that working either.

Every time i run my application i just get null pointer exception errors, I've tried some try catch blocks but I'm new to all this in general and haven't had any success in troubleshooting. It might be something a simple as a query typo..

I'll include the bit of code involved below, but any suggestions general or specific are welcome, Thanks for taking the time to look.

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)));

}


I believe that when SqliteDatabase#rawQuery returns a Cursor, it is initially positioned before the first result. So, in order to actually read a value from the result you get (without getting NullPointerExceptionExplosionDeath), call cursor.moveToFirst() before you get the float. I've been bitten by that before.


You can get data like

    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--;
    }       
    }
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜