Я застрял в одной точке из-за долгого времени, то есть с использованием
SimpleCursorAdapter
, так как это не удается при возвращении правильного значения.Я видел много подобных постов в самой SO, в которых говорилось, что я должен добавить столбец _id в запрос к базе данных курсора, а не делать:
db.rawQuery(String,String)
Мой код в onCreate (..) равен
HospitalData = new Database(this);
HospitalData.open();
Cursor c = HospitalData.getAllRows_Patient_Db();
startManagingCursor(c);
c.moveToFirst();
//HERE SOME LOOP IS NEEDED FOR TRAVERSING AND PUTTING IN THE LISTVIEW
while(c.isAfterLast() == false)
{
String[] columns = new String[] { c.getString(1), c.getString(2) };
int[] to = new int[] { R.id.room_number_db, R.id.pt_initial_db };
adapter = new SimpleCursorAdapter(this,R.layout.patient_db, c,columns,to);
c.moveToNext();
}
setListAdapter(adapter);
И ранее мой код доступа к базе данных был следующим:
public Cursor getAllRows_Patient_Db()
{
return db.query(DATABASE_PATIENT_TABLE, new String[] {KEY_ROWID, KEY_ROOM_NUMBER,
KEY_PATIENT_INITIAL
},
null,
null,
null,
null,
null);
}
, где KEY_ROWID определен следующим образом
public static final String KEY_ROWID = "_id";
И ошибка с этим
07-04 22:10:23.301: ERROR/AndroidRuntime(16795): Caused by: java.lang.IllegalArgumentException: column '90' does not exist
07-04 22:10:23.301: ERROR/AndroidRuntime(16795): at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:314)
07-04 22:10:23.301: ERROR/AndroidRuntime(16795): at android.widget.SimpleCursorAdapter.findColumns(SimpleCursorAdapter.java:312)
Здесь столбец 90 не является идентификатором столбца, но, согласно моей базе данных, это данные, хранящиеся в cursor.getString (1), но я думаю, что здесь он пытается найти cursor.getString (0), который является идентификатором строки.
Позже я изменил свой код следующим образом
public Cursor getAllRows_Patient_Db()
{
String db_sel = "SELECT id as _id, KEY_ROOM_NUMBER" +
",KEY_PATIENT_INITIAL FROM DATABASE_PATIENT_TABLE";
return db.rawQuery(db_sel,null);
}
Но все равно я получаю ошибку, эта ошибка времени отличается
07-04 21:36:12.510: ERROR/global(9861): Deprecated Thread methods are not supported.
07-04 21:36:12.950: ERROR/AndroidRuntime(9861): FATAL EXCEPTION: main
07-04 21:36:12.950: ERROR/AndroidRuntime(9861): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.pro/com.pro.CopyOfFirstScreen}: android.database.sqlite.SQLiteException: no such table: DATABASE_PATIENT_TABLE: , while compiling: SELECT id as _id, KEY_ROOM_NUMBER,KEY_PATIENT_INITIAL FROM DATABASE_PATIENT_TABLE
07-04 21:36:12.950: ERROR/AndroidRuntime(9861): Caused by: android.database.sqlite.SQLiteException: no such table: DATABASE_PATIENT_TABLE: , while compiling: SELECT id as _id, KEY_ROOM_NUMBER,KEY_PATIENT_INITIAL FROM DATABASE_PATIENT_TABLE
Я застрял с оченьдолгое время, пожалуйста, помогите !!
РЕДАКТИРОВАТЬ: Хорошо, теперь с вами, ребята, помогите, мой запрос правильно, и спасибо за это, я извиняюсь, я не очень хорошо понимаю синтаксис для запроса к базе данных, но я пытаюсьlearn
Рабочий запрос после изменений:
String db_sel = "SELECT _id as _id, room_number" +",patient_initial FROM " + DATABASE_PATIENT_TABLE;
На самом деле мне пришлось изменить объявленную строку со значениями ключа
public static final String KEY_ROWID = "_id";
public static final String KEY_ROOM_NUMBER = "room_number";
public static final String KEY_PATIENT_INITIAL = "patient_initial";
Но теперь я вижу другую проблему, котораяне из оператора запроса, а из-за того, как я получаю доступ или использую simplecursorAdapter

Как видно, в моей таблице 2 строки и 3 столбца. Теперь я хочу получитьданные из столбца 2 и столбца 3 и поместите его в мой список.Но после исправления из запроса я получаю еще одну ошибку
Первоначально это было
String[] columns = new String[] {c.getString(1), c.getString(2) };
int[] to = new int[] { R.id.room_number_db, R.id.pt_initial_db };
adapter = new SimpleCursorAdapter(this,R.layout.patient_db, c,columns,to);
c.moveToNext();
setListAdapter(adapter);
И ошибка была
07-05 21:32:29.228: ERROR/AndroidRuntime(1505): Caused by: java.lang.IllegalArgumentException: column '90' does not exist
07-05 21:32:29.228: ERROR/AndroidRuntime(1505): at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:314)
07-05 21:32:29.228: ERROR/AndroidRuntime(1505): at android.widget.SimpleCursorAdapter.findColumns(SimpleCursorAdapter.java:312)
android.widget.SimpleCursorAdapter.findColumns(SimpleCursorAdapter.java:312)
Как вы можете видеть, он пытается получить доступ к данным первого столбца, несмотря на доступ к строке
После этого я внес изменения в свой код
int x = 0;
String[] columns = new String[] { c.getString(0),c.getString(1), c.getString(2) };
int[] to = new int[] { x, R.id.room_number_db, R.id.pt_initial_db };
adapter = new SimpleCursorAdapter(this,R.layout.patient_db, c,columns,to);
c.moveToNext();
setListAdapter(adapter);
Это было только предположение, чтобы выяснить, как SimpleCursorAdapter работает иначе, чем обычный курсор, и я получаю ошибку
07-05 21:34:47.947: ERROR/AndroidRuntime(1966): Caused by: java.lang.IllegalArgumentException: column '1' does not exist
07-05 21:34:47.947: ERROR/AndroidRuntime(1966): at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:314)
Я знаю, что этот вопрос становится слишком длинным :-(Вы предлагаете мне удалить некоторый код отсюда.