如果没有填充数据库,我的Android应用程序就会崩溃

时间:2010-11-25 09:54:56

标签: android database

我的Android应用程序中的数据库出了问题。也许,我的申请正在运作,但让我解释一下。

以下是我的应用程序代码的一部分..我不想粘贴整个它不需要。

private SQLiteStatement insertStmt;
   private static final String INSERT = "insert into "
      + TABLE_NAME + "(name,surname) values (?,?)";


public DataHelper(Context context) {
      this.context = context;
      OpenHelper openHelper = new OpenHelper(this.context);
      this.db = openHelper.getWritableDatabase();
      this.insertStmt = this.db.compileStatement(INSERT);
    }

public long insert(String name, String surname) {
      this.insertStmt.bindString(1, name);
      this.insertStmt.bindString(2, surname);
      return this.insertStmt.executeInsert();
   }

@Override
      public void onCreate(SQLiteDatabase db) {
         db.execSQL("CREATE TABLE IF NOT EXISTS " + TABLE_NAME + 
          "(id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, surname TEXT)");
      }

因此,当我尝试运行我的应用程序时,我会强制关闭,但是当我手动放置时:

dh.insert("test", "ooo");

..在我的主要活动的onCreate方法中,一切都很好并且正常工作。 因此,结论是我必须首次运行应用程序以便它可以正常工作。我想可能用我之后通过应用程序中的一些TextView插入的新信息更新那一行,但我想知道是否有比这更聪明的解决方案?

1 个答案:

答案 0 :(得分:1)

显然,您的插入没有错误,至少不会导致您的应用程序崩溃。

由于您收到了CursorIndexOutOfBoundsException,这意味着您在某个地方有一个select查询并尝试移动或设置它,然后再检查它是否有任何行。

如果您将光标移动到不存在的索引,通常会发生这种情况,即光标为空时cursor.moveToFirst()cursor.move(n) n大于cursor.getCount()-1 < / p>

在移动或访问游标之前,您总是必须检查是否有任何行返回!

Cursor c = db.query(...);
if(c!=null && c.getCount()>0) {
    c.moveToFirst(); // (or c.move(0))

    // Do your cursor operations here!
}

显然,您的插入因某些原因失败,您可以通过以下方式轻松检查:

long insertId = dh.insert("test", "ooo");

if(insertId > 0) {
    // insert was successfull 
} else {
    // insert failed
}