0

我正在尝试在 android 中显示 SQLite 数据库的内容。当我不在 db2.select 上添加任何条件时,该代码有效。但是,当我向查询添加条件时,它会标记一个错误“数据库上从未调用过关闭”。

解决方案是什么?

提前致谢。

这是我的代码:

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

编辑:在此处发布您的 logcat 以获得进一步的帮助

于 2012-06-18T13:50:36.977 回答
0

我认为问题是你试图关闭数据库,而你仍然有一个打开的游标。将 oncreate 方法的最后三行更改为,我认为您的问题已解决。

请记住始终关闭您首先打开的最后一个东西。

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

编辑:进一步看,我认为错误也可能是您在问题和描述之间缺少空间,但是我之前描述的内容是当您与关闭它的方式不一致时会给您带来很多麻烦。

于 2012-06-18T14:00:10.257 回答
0

你少了一个空格。

String Orderby= Question+"DESC"; 

这将产生:

questionDESC

它需要是

String Orderby= Question+" DESC"; 
于 2012-06-18T13:52:59.787 回答