-1

データを sqlite データベース テーブルに挿入し、最初のレコードを挿入すると正常に挿入されますが、2 番目以降のすべてのレコードは挿入されません。これが私のデータベース ヘルパー クラスです。私はFirefoxのsqliteマネージャで同じクエリを試しましたが、うまくいきました。私のコードでそれらが機能しない理由がわかりません。

    private static final String DATABASE_CREATE = "create table " + DATABASE_TABLE + "( " + KEY_ROWID +
        " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_DESCRIPTION + " text, "+ KEY_WHY+" text , "+ KEY_ACCOUNTABILITY+
        " text , "+KEY_ALARM_TYPE+" text , "+KEY_ALARM_VOLUME+" text,  "+KEY_BG_IMAGE+" text, "+KEY_CATEGORY+"  text, "+KEY_DATE_TIME+  " datetime "+" , "+KEY_STATUS+" text );";
    public void addRecord(String description,String why, String accontability, String alarm_type,
            String alarm_vol, String bg_image, String category, Date goalDateTime,String status) {
        String query = "INSERT INTO " + DATABASE_TABLE + " VALUES(null,'"+ description + "', '" + why +  "', '" + accontability +"','" + alarm_type +
                "', '" + alarm_vol +  "', '" + bg_image +"','" +category+ "','" +  goalDateTime +"','"+status+"');";
        Log.v("--->", query);
        try{
        mDB.execSQL(query);



    } catch (Exception ex) {
        Log.v("database error", ex.toString());

    }
    }

ここでテーブルにデータを追加しています

    try {
        /*
         * dbHelper = new GoalDbAdapter(this); dbHelper.open();
         * Log.v("database ","database opened"); // dbHelper. fillData();
         */
        db = new GoalDbAdapter(this);
        db.open();
        String imagePath = pref.getValue("imagePath", "");
        String goalCateg = pref.getValue("categText", "");
        String vol = pref.getValue("vol", "");
        String alarmType=  pref.getValue("ringTonePath", "");
        db.addRecord(goal_desc, goal_why, accountability, alarmType, vol, imagePath, goalCateg, goalDate,"");
         cursor = db.getTop3Goals();
        Log.v("cursor count in add act",".."+cursor.getCount());
        cursor.close();
        db.close();
    } catch (Exception ex) {
        Log.v("database error", ex.toString());

    }

ゴールを取得するためのコードは次のとおりです。すべてのデータを取得することはできません。最初のゴールのみを返し、他のゴールは返しません。これらのメソッドはすべて、最初のゴールのみを返しています。

     public Cursor getGoals() {
    Cursor c_all = mDB.rawQuery("SELECT * FROM " + DATABASE_TABLE, null);
    int count= c_all.getCount();
    Log.v("cursor count in db all goals", c_all.getCount()+"..");
    c_all.moveToFirst();
    return c_all;
}

//SELECT * FROM table ORDER BY date DESC LIMIT 5

public Cursor getTop3Goals() {
    Cursor c = mDB.rawQuery("SELECT * FROM " + DATABASE_TABLE + " ORDER BY "+ KEY_DATE_TIME + " DESC LIMIT 3", null);
    c.moveToFirst();
    return c;
}

public Cursor getGoalsByDate() {
    Cursor c = mDB.rawQuery("SELECT * FROM " + DATABASE_TABLE + " ORDER BY "+ KEY_DATE_TIME + " DESC ", null);
    c.moveToFirst();
    return c;
}
4

1 に答える 1

1

次のように挿入方法を変更してみてください。

    public void addRecord(String description,String why, String accontability, String alarm_type,
                    String alarm_vol, String bg_image, String category, Date goalDateTime,String status){

      ContentValues initialValues = new ContentValues();

      initialValues.put(KEY_DESCRIPTION , description);
      initialValues.put(KEY_WHY, why);
      initialValues.put(KEY_ACCOUNTABILITY, accontability);
      initialValues.put(KEY_ALARM_TYPE, alarm_type);

      initialValues.put(KEY_ALARM_VOLUME, alarm_vol);
      initialValues.put(KEY_BG_IMAGE, bg_image);
      initialValues.put(KEY_CATEGORY, category);
      initialValues.put(KEY_DATE_TIME, goalDateTime);
      initialValues.put(KEY_STATUS, status);

      long rowId = mDB.insert(DATABASE_TABLE , null, initialValues);


}

rowId新しいレコードの行 ID 番号です。

編集: 次のコードを試してください:

public Cursor getGoals() {
    Cursor cursor = mDB.query(DATABASE_TABLE, null, null, null, null, null, null);

        if ((cursor != null) && (cursor.getCount() > 0)) {
            cursor.moveToNext();

            return cursor;
        }

    return null;
}
于 2012-05-19T19:09:24.107 に答える