Hello I am looking for sample code in which cursor adapter is used with sqlite?
Asked
Active
Viewed 1.1e+01k times
61

Cody Gray - on strike
- 239,200
- 50
- 490
- 574

Gainster
- 5,481
- 19
- 61
- 90
-
3This is not off topic at all. Asking how to code a specific item is the lifeblood of StackOverflow. – Chris Rogers Jan 29 '18 at 22:11
-
Here is the simple answer: https://queception.com/question.php?question=106 – Stack Overflow Nov 30 '19 at 00:00
3 Answers
105
Really simple example.
Here is a really simple, but very effective, example. Once you have the basics down you can easily build off of it.
There are two main parts to using a Cursor Adapter with SQLite:
Create a proper Cursor from the Database.
Create a custom Cursor Adapter that takes the Cursor data from the database and pairs it with the View you intend to represent the data with.
1. Create a proper Cursor from the Database.
In your Activity:
SQLiteOpenHelper sqLiteOpenHelper = new SQLiteOpenHelper(
context, DATABASE_NAME, null, DATABASE_VERSION);
SQLiteDatabase sqLiteDatabase = sqLiteOpenHelper.getReadableDatabase();
String query = "SELECT * FROM clients ORDER BY company_name ASC"; // No trailing ';'
Cursor cursor = sqLiteDatabase.rawQuery(query, null);
ClientCursorAdapter adapter = new ClientCursorAdapter(
this, R.layout.clients_listview_row, cursor, 0 );
this.setListAdapter(adapter);
2. Create a Custom Cursor Adapter.
Note: Extending from ResourceCursorAdapter
assumes you use XML to create your views.
public class ClientCursorAdapter extends ResourceCursorAdapter {
public ClientCursorAdapter(Context context, int layout, Cursor cursor, int flags) {
super(context, layout, cursor, flags);
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
TextView name = (TextView) view.findViewById(R.id.name);
name.setText(cursor.getString(cursor.getColumnIndex("name")));
TextView phone = (TextView) view.findViewById(R.id.phone);
phone.setText(cursor.getString(cursor.getColumnIndex("phone")));
}
}

Joshua Pinter
- 45,245
- 23
- 243
- 245
-
6I think this deserves more points. It's very clear and helpful for understanding. – Chris Mar 21 '14 at 01:01
-
3Thanks @Chris. If it helps just you, it'd be worth the effort. :) – Joshua Pinter Mar 21 '14 at 01:10
-
6"duplicate" or not, this answer is the top google search for "cursoradapter example" and is the clearest I've seen. – jmaculate Oct 16 '14 at 20:19
-
Here is the simple answer: https://queception.com/question.php?question=106 – Stack Overflow Nov 30 '19 at 00:00
38
In Android, How to use a Cursor with a raw query in sqlite:
Cursor c = sampleDB.rawQuery("SELECT FirstName, Age FROM mytable " +
"where Age > 10 LIMIT 5", null);
if (c != null ) {
if (c.moveToFirst()) {
do {
String firstName = c.getString(c.getColumnIndex("FirstName"));
int age = c.getInt(c.getColumnIndex("Age"));
results.add("" + firstName + ",Age: " + age);
}while (c.moveToNext());
}
}
c.close();

Eric Leschinski
- 146,994
- 96
- 417
- 335
-
16Great example. Let me suggest a few improvements to shorten it: 1. Remove `if (c != null)`. Reason: [`rawQuery` won't return null](http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#rawQuery), and if it does, there is some bug in the Sqlite implementation and the program should crash and send a bug report instead of silently doing nothing. ... – Heinzi Apr 01 '14 at 15:15
-
7... 2. Remove `if (c.moveToFirst())` and replace do-while with a `while (c.moveToNext()) { ... }` loop. Reason: [`rawQuery` always returns a Cursor positioned before the first row](http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#rawQuery), so the first `moveToNext` will do exactly what moveToFirst would do. ... – Heinzi Apr 01 '14 at 15:16
-
6... 3. Put `try {` after the call to `rawQuery`, and put `} finally { ... }` around `c.close()`. That way, the cursor will be closed correctly in case of an exception during the cursor execution. – Heinzi Apr 01 '14 at 15:18
20
CursorAdapter Example with Sqlite
...
DatabaseHelper helper = new DatabaseHelper(this);
aListView = (ListView) findViewById(R.id.aListView);
Cursor c = helper.getAllContacts();
CustomAdapter adapter = new CustomAdapter(this, c);
aListView.setAdapter(adapter);
...
class CustomAdapter extends CursorAdapter {
// CursorAdapter will handle all the moveToFirst(), getCount() logic for you :)
public CustomAdapter(Context context, Cursor c) {
super(context, c);
}
public void bindView(View view, Context context, Cursor cursor) {
String id = cursor.getString(0);
String name = cursor.getString(1);
// Get all the values
// Use it however you need to
TextView textView = (TextView) view;
textView.setText(name);
}
public View newView(Context context, Cursor cursor, ViewGroup parent) {
// Inflate your view here.
TextView view = new TextView(context);
return view;
}
}
private final class DatabaseHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "db_name";
private static final int DATABASE_VERSION = 1;
private static final String CREATE_TABLE_TIMELINE = "CREATE TABLE IF NOT EXISTS table_name (_id INTEGER PRIMARY KEY AUTOINCREMENT, name varchar);";
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TABLE_TIMELINE);
db.execSQL("INSERT INTO ddd (name) VALUES ('One')");
db.execSQL("INSERT INTO ddd (name) VALUES ('Two')");
db.execSQL("INSERT INTO ddd (name) VALUES ('Three')");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
public Cursor getAllContacts() {
String selectQuery = "SELECT * FROM table_name;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
return cursor;
}
}

Aswin Rajendiran
- 3,399
- 1
- 21
- 18