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--;
}
}
精彩评论