-1

如果我尝试使用onSets.close();in 方法关闭光标getData(),则数据不会出现在该位置。如果我不关闭游标方法,则 Eclipse 会抱怨并说基础或游标未关闭。但是如果我c.moveToFirst();在方法中添加一行getSets(String toexes_ids, String toprog_dif),则不会出现错误。这是为什么?我有两种方法:

MyDatabase.java 中的一种方法

public Cursor getSets(String toexes_ids, String toprog_dif) {
  SQLiteDatabase db = getReadableDatabase();
  SQLiteQueryBuilder qb = new SQLiteQueryBuilder();     
  String [] sqlSelect = {"_id", "exes_ids", "sets_ids", "sets_weight", "sets_ones"}; 
  String sqlTables = "Sets";
  String selection = "exes_ids = " + toexes_ids + " AND " + "prog_dif = " + toprog_dif;
  qb.setTables(sqlTables);
  Cursor c = qb.query(db, sqlSelect, selection, null, null, null, null);
  c.moveToFirst();
  return c;
  }

MainActivity.java 中的第二种方法

public void getData() {
  db = new MyDatabase(this);
  onSets = db.getSets(toexes_ids, toprog_dif);
  ListAdapter adapter = new SimpleCursorAdapter(this, 
    R.layout.itemsets, onSets, 
    new String[] {"sets_ids", "sets_weight", "sets_ones"},  
    new int[] {R.id.itemsets_ids, R.id.itemsets_weight, R.id.itemsets_ones});
  listSets.setAdapter(adapter);
  db.close();
    }

错误:

12-29 16:17:09.335: D/dalvikvm(571): GC_CONCURRENT freed 393K, 53% free 2759K/5767K, external 1574K/1802K, paused 5ms+10ms
12-29 16:17:09.355: E/Database(571): close() was never explicitly called on database '/data/data/com.exp.exp_betta/databases/fitsdbsqlite3' 
12-29 16:17:09.355: E/Database(571): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
12-29 16:17:09.355: E/Database(571): at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1847)
4

2 回答 2

0

尝试从数据库连接中获取数据后立即关闭它。保持打开状态会导致数据库泄漏,这就是 Eclipse 抛出错误 For not closed DatabaseObjectNotClosedException 的原因

public Cursor getSets(String toexes_ids, String toprog_dif) {
  SQLiteDatabase db=getReadableDatabase();
  //Querying the database
   db.close(); //as you get the cursor you can now close the connection here.
  return cursor;
 }

public void getData()
 {
  }
于 2012-12-29T16:47:00.083 回答
0

我认为您需要关闭在 getSets() 方法中创建的数据库实例

于 2012-12-29T16:47:50.850 回答