2012-02-08 70 views
1

我試圖使用SQLite數據庫爲我的應用程序存儲一些數據。我在我的DbHelper類得到這個(延伸SqLiteOpenHelper)SQLite從第0行第1列獲得字段插槽失敗

// Database creation sql statement 
private static final String DATABASE_CREATE = "create table " 
     + jarsTable + "("+colID+" integer primary key autoincrement, "+colName+" varchar(100), " + 
     colGoal+" real not null, "+colBal+" real not null, "+colCurr+" varchar(100));"; 

public DbHelper(Context context) { 
    super(context, dbName, null, DATABASE_VERSION); 
} 

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

而且我這有我的DataSource類

private Jar cursorToJar(Cursor cursor) { 
    Jar myJar = new Jar(); 
    myJar.setId(cursor.getLong(0)); 
    myJar.setName(cursor.getString(1)); 
    myJar.setBalance(cursor.getDouble(2)); 
    myJar.setGoal(cursor.getDouble(3)); 
    myJar.setCurrency(cursor.getString(4)); 
    return myJar; 
} 

內,我得到我的問題標題中提到的錯誤,當它到達上面的myJar.setName行時,它會崩潰應用程序。對於我出錯的地方,我有點困惑,我得到一個字符串,而我的表在第一列存儲一個字段,我想,所以..是的。感謝您的幫助,提前

編輯:這是我的人口方法:

public Jar createJar(String name, double goal, String currency) { 
    ContentValues values = new ContentValues(); 
    values.put(DbHelper.colName, name); 
    values.put(DbHelper.colGoal, goal); 
    values.put(DbHelper.colCurr, currency); 
    values.put(DbHelper.colBal, 0.0); 
    long insertId = database.insert(DbHelper.jarsTable, null, 
      values); 
    Log.d("Insert ID:", ""+insertId); 
    // To show how to query 
    Cursor cursor = database.query(DbHelper.jarsTable, 
      allColumns, DbHelper.colID + " = " + insertId, null, 
      null, null, null); 
    cursor.moveToFirst(); 
    return cursorToJar(cursor); 
} 
+0

logcat給出了什麼錯誤? – 2012-02-08 01:25:31

+0

02-07 20:05:11.240:E/AndroidRuntime(445):java.lang.RuntimeException:傳遞結果失敗ResultInfo {who = null,request = 0,result = -1,data = Intent {(has extras)} } to activity {com.nickavv.quickchange/com.nickavv.quickchange.JarList}:java.lang.IllegalStateException:從第0行獲取字段插槽col 1失敗 – Nick 2012-02-08 01:26:20

回答

5

始終使用遊標的方法getColumnIndex()訪問列。像這樣:

myJar.setName(cursor.getString(cursor.getColumnIndex(colName))); 

不是說這是絕對問題 - 因爲你沒有表現出Cursor如何填充 - 但它是可能的。

+0

我將它們全部更改爲此,現在我的錯誤說明了Column -1而不是列1,但看起來是一樣的 – Nick 2012-02-08 01:54:36

+0

正如我所提到的,你沒有展示你的'光標'如何被填充。 – 2012-02-08 02:00:51

+0

啊,當然,對不起。我修改了我在網上找到的SQLite教程中的所有代碼,非常抱歉,如果有明顯的錯誤,哈哈 – Nick 2012-02-08 02:03:53

相關問題