0

アンドロイドでSQLiteデータベースの内容を表示しようとしています。このコードは、db2.selectに条件を追加しない場合に機能します。ただし、クエリに条件を追加すると、「データベースでcloseが呼び出されませんでした」というエラーのフラグが立てられます。

これに対する解決策は何ですか?

前もって感謝します。

これが私のコードです:

public class LogDisp extends Activity {
final ResultLog resultlog = new ResultLog(this);
String[] FROM = {_ID,Type,Date,Question,Percent,Avg };
String testtype="Verbal:: Sentence Correction" ;


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    //String sqlstr="SELECT Date, Question, Avg, Percent FROM TABLE_NAME2 where Question>5";
    String Orderby= Question+"DESC";

    SQLiteDatabase db2 = resultlog.getReadableDatabase();
    Cursor cursor = db2.query(TABLE_NAME2,FROM,null, null, null, null, Orderby);    

    //Cursor cursor =db2.rawQuery(sqlstr, null); 

    ScrollView sv = new ScrollView(this);
    LinearLayout ll= new LinearLayout(this);
    sv.addView(ll);

    final TableLayout tv = new TableLayout(this);
    ll.addView(tv);
    while(cursor.moveToNext()){
        String type=cursor.getString(1) ;
        String date=cursor.getString(2);
        String question=cursor.getString(3);
        String percent=cursor.getString(4);
        String avg=cursor.getString(5);


        TableRow tr= new TableRow(this);
        tv.addView(tr);
        final String space=""+""+""+""+""+"";
        TextView txtview= new TextView(this);
        txtview.setText(date+space+question+space+percent+space+avg);
        tr.addView(txtview); 
    }

     this.setContentView(sv);
     db2.close();
     cursor.close();

}

}

そして、これが私のSQLiteヘルパークラスです:

public class ResultLog extends SQLiteOpenHelper{ 
 private static final String DATABASE_NAME2 = "LogofResult.db";
 private static final int DATABASE_VERSION2 = 1;

 public ResultLog(Context ctx) { 
        super(ctx, DATABASE_NAME2, null, DATABASE_VERSION2);
     }  

 // Database creation sql statement
    private static final String DATABASE_CREATE = "create table "
                    + TABLE_NAME2+ "(" + 
                    _ID + " integer primary key autoincrement, " + 
                    Type +" text not null,"+
                    Date     + " integer not null,"+
                    Question + " integer not null,"+  
                    Avg+" real not null,"+
                    Percent +" real not null);" ;


    @Override
    public void onCreate(SQLiteDatabase database) {
                database.execSQL(DATABASE_CREATE);
            }

            @Override
            public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
                db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME2);
                onCreate(db);
            }

        }
4

4 に答える 4

1

closeがデータベースで呼び出されることはありません

呼び出された場合は、データベースを閉じる必要があります。あなたはonDestroy()方法またはonStop()方法でそれを行うことができます。

これは正しくString Orderby= Question+"DESC"ないようです。ここにスペースを追加してください

Question+" DESC"そしてそれはうまくいくはずです。これによりエラーが発生しました。

于 2012-06-18T13:48:54.490 に答える
0

私の推測では、Orderby変数にあります。列名との間にスペースを残していませんDESC

編集:さらに支援が必要な場合は、ここにログキャットを投稿してください

于 2012-06-18T13:50:36.977 に答える
0

スペースが足りません。

String Orderby= Question+"DESC"; 

それは生成されます:

questionDESC

それはする必要があります

String Orderby= Question+" DESC"; 
于 2012-06-18T13:52:59.787 に答える
0

問題は、カーソルを開いたままデータベースを閉じようとしていることだと思います。oncreateメソッドの最後の3行をに変更すると、問題は修正されたと思います。

最初に開いた最後のものを常に閉じることを忘れないでください。

cursor.close();
db2.close();
this.setContentView(sv);

編集:さらに見てみると、質問と説明の間にスペースがないことが原因かもしれないと思いますが、前に説明したのは、閉じる方法に一貫性がない場合に多くの問題を引き起こす可能性があるものです。

于 2012-06-18T14:00:10.257 に答える