2010-11-25 48 views
0

我的Android應用程序中的數據庫出現問題。也許,我的應用程序正在工作,但讓我解釋一下。我的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"); 

..in的onCreate方法在我的主要活動一切正常,工作。 所以,結論是,我必須把第一次運行應用程序,所以它可以正常工作的價值。我想也許用新的信息來更新那一行,然後我通過應用程序的一些TextView來插入新的信息,但我想知道是否有比這更聰明的解決方案?

+1

如何張貼你在logcat中獲取,而出現這種情況的確切異常?我們不是有錢人或讀者,因爲在90%的情況下,異常告訴我們什麼是錯誤的 – Tseng 2010-11-25 10:18:25

回答

1

顯然,插入沒有錯誤,至少它不會導致應用程序崩潰。

由於你得到一個CursorIndexOutOfBoundsException,這意味着你有一個選擇查詢的地方,並嘗試移動或設置它之前檢查它是否有任何行。

,如果你將光標移動到不存在的指數,即cursor.moveToFirst()而你的光標爲空或cursor.move(n)其中n是大於cursor.getCount()-1

之前移動或訪問光標,你總是要檢查,如果這通常發生任何行都會返回!

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 
} 
相關問題