は私がSimpleCursorAdapterは、正しい値を戻しながら、それが失敗したとして
SimpleCursorAdapter
を使用して長い時間から一点、すなわちで立ち往生されている使用することは困難されています。私はの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);
ではなく、私は
db.rawQuery(String,String)
を行う必要があり、私はカーソルのデータベースクエリに_id列を追加する必要があることを言って、SO自体に類似した多くのポストを見てきました
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が列IDではありませんが、私のデータベースによるとcursor.getString(1)に格納されたデータですが、私はここでそれをしようとしていると考えています検索カーソル.getString(0)は行IDです。
その後
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
違います! !
EDIT:わかりました、今あなたたちは私のクエリステートメントが正しく、そのためのおかげで、私は、データベースクエリの構文を理解するには良くないよ申し訳ありませんが、私は
作業クエリの後を学ぶしようとしています助けを借りて、変更は、実際に私は
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";
キー値で宣言された文字列を変更しなければならなかった
String db_sel = "SELECT _id as _id, room_number" +",patient_initial FROM " + DATABASE_PATIENT_TABLE;
である。しかし、今はない別の問題を参照してくださいクエリステートメントが、途中から私がアクセスしたり、あなたが私のテーブルには、2行3列を持っていることを見ることができるようにsimplecursorAdapter
を使用しています、今私は、列2、列3からデータを取得したいですそれを私のリストビューに入れてください。 しかし、クエリから修正した後、私は別のエラーを取得しています(SimpleCursorAdapter
は、もともとは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
ました。Javaの:あなたは 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);
これが唯一だった私は自分のコードに変更を行った後、行
にアクセスする最初の列inspiteのデータにアクセスしようとして見ることができるように312)
通常のカーソルに比べてどのように異なっSimpleCursorAdapter作品を見つけるために推測し、私が手にエラーが、私はこの質問をuを行う:-(長すぎるとなってきている知っている
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)
です私はここからいくつかのコードを削除するように勧めます。
android.database.sqlite.SQLiteException: no such table: DATABASE_PATIENT_TABLE:
:
Androidはデータベースファイルを見つけることができない場合に、このエラーが頻繁に発生します。正規のDatabaseHelperを使用していない理由はありますか? – Estel
データベースを作成するためにDatabaseHelperを使用しましたが、私の質問は以前は不明でした。私が以前に得ていたエラーを追加しました。それを見て、もし可能なら私に親切に案内してください。 –