2011-07-04 1 views
0

は私が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

DB Table

を使用しています、今私は、列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: 

+0

Androidはデータベースファイルを見つけることができない場合に、このエラーが頻繁に発生します。正規のDatabaseHelperを使用していない理由はありますか? – Estel

+0

データベースを作成するためにDatabaseHelperを使用しましたが、私の質問は以前は不明でした。私が以前に得ていたエラーを追加しました。それを見て、もし可能なら私に親切に案内してください。 –

答えて

0

問題は修正されていますが、主なことは、データベースにクエリごとに必ず_idを問い合わせる必要がありますが、私がcursor.getString(someIndex)を使用すると、アダプタとして誤解を招く私の場合は、最初の列の内容をROWIDとして取り込み、その行を検索しようとしています。

NetherをrawQuery()したり、 "Select _id as _id"を使用することは必須です。私が感じたように、これらのことはいつかは誤解を招くことがあります。

したがって、以下のことを簡単にすることがコードです。 データベースのコード

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

アクティビティコード

HospitalData = new Database(this); 
    HospitalData.open(); 
    Cursor c = HospitalData.getAllRows_Patient_Db(); 


    startManagingCursor(c); 

    String[] columns = new String[] {HospitalData.KEY_ROOM_NUMBER,HospitalData.KEY_PATIENT_INITIAL }; 
    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); 
2

あなたは、エラー・スタックのこの部分を読むことがありますか? データベースにそのようなテーブルがありません。 CursorAdapterの問題ではありません。 あなたのループは完全に無意味なようです - ちょうどいくつかのJavaハンドブックを読んでください。最後しばらく

String[] columns = new String[] { c.getString(1), c.getString(2) }; 

columns[]は、あなたが数十を作成しているあなたのwhile{}ループでは、列に名前ない値... が含まれている必要がありSimpleCursorAdaptersの(?): [OK]を、あなたのコード内のいくつかの問題をリストし始めることができますオンになります。 コード部分:

String db_sel = "SELECT id as _id, KEY_ROOM_NUMBER" + 
    ",KEY_PATIENT_INITIAL FROM DATABASE_PATIENT_TABLE"; 

明らかに間違っています。

String db_sel = "select id as _id, +"KEY_ROOM_NUMBER+", "+ KEY_PATIENT_INITIAL +" from "+DATABASE_PATIENT_TABLE; 

はそれを置き換えます:それと

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

を:

String[] columns = new String[] { c.getColumnName(1), c.getColumnName(2) }; 
    int[] to = new int[] {R.id.room_number_db, R.id.pt_initial_db }; 
+0

私は)唯一の公共カーソルgetAllRows_Patient_Db(の変更を行った後 { 文字列のdb_sel = "_idとIDを選択し、KEY_ROOM_NUMBER" + "DATABASE_PATIENT_TABLE FROM KEY_PATIENT_INITIAL" を取得しています。このエラー。 戻り値db.rawQuery(db_sel、null); }これは以前のコードとまったく同じです。 –

+0

私は、テーブルが完全に生成されたと言うことを意味する –

+0

私の編集コードを参照してください私は前に取得していたエラーが追加されている場所は、それはrowidを検索しようとしていたとクラッシュしていた。 –

2

新しいエラー私はあなたがそうちょうどそれらの定数を使用

private static String DATABASE_PATIENT_TABLE = "patient"; 

のようなものを持っていることを前提としあなたがタブを持っていないと言っているle "DATABASE_PATIENT_TABLE"をデータベースに追加します。データベース内のテーブルの名前で、データベース内のテーブルの名前ではない文字列の静的フィールド名のように見えるコードから。

以下のコードでは、 "DATABASE_PATIENT_TABLE"をデータベース内のテーブルの名前に変更する必要があります。

String db_sel = "SELECT id as _id, KEY_ROOM_NUMBER" + 
",KEY_PATIENT_INITIAL FROM DATABASE_PATIENT_TABLE"; 

これを試してみて、それが動作するかどうかを確認:

String db_sel = "SELECT id as _id, KEY_ROOM_NUMBER" + 
",KEY_PATIENT_INITIAL FROM" + DATABASE_PATIENT_TABLE; 

は、元のエラーについてはSimpleCursorAdapterは_idのフィールドが含まれている必要があります。カーソルを動かすSQL Statmentに加えた変更によって修正されるはずですが、SQLステートメントに正しいテーブル名があることを確認する必要があります。

これが役に立ちます。

+0

Georgeさんのお手伝いをよろしくお願いします。私のコードスニペットをもう一度見てください。再度ありがとう –

+0

いつでも。それが助けてくれてうれしい。 –

関連する問題