2012-02-08 11 views
1

SQLiteデータベースを使用してアプリケーション用のデータを保存しようとしています。私は(SqLiteOpenHelperを拡張)私のDbHelperクラス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行に達したときにアプリケーションをクラッシュさせます。私は本当にどこが間違っているのか混乱しています。私は文字列を取得しています。私のテーブルは列1にフィールドを格納しています。そうです。おかげで助けを、事前に

EDIT:

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にはどのようなエラーがありますか? –

+0

02-07 20:05:11.240:E/AndroidRuntime(445):java.lang.RuntimeException:結果の配信に失敗しましたResultInfo {who = null、request = 0、result = -1、data = Intent {(have extra)}} }アクティビティ{com.nickavv.quickchange/com.nickavv.quickchange.JarList}:java.lang.IllegalStateException:行0列1からフィールドスロットを取得できません – Nick

答えて

5

常に列にアクセスするために、カーソルのgetColumnIndex()メソッドを使用します。ここに私の人口方法があります。これと同じように: - あなたはCursorが移入された方法を示していないので -

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

はそれが絶対に問題だとは言わないが、それは可能性があります。

+0

私はそれらをすべて変更しました。列1の代わりに、それ以外の場合は同じように見える – Nick

+0

私が言及したように、あなたはあなたの 'Cursor 'がどのように人口に入っているかを示していない。 –

+0

ああ、もちろん、申し訳ありません。私はこのコードをすべてSQLiteのチュートリアルから修正しました。オンラインで見つけたので、虚偽のエラーがあれば謝罪します。 – Nick

関連する問題