รับผลรวมของคอลัมน์ใน Java Sqlite DB และการจัดเก็บในคอลัมน์อื่น

นักพัฒนาแอปมือใหม่ที่นี่ใช้ Eclipse IDE ทั้งหมดที่ฉันต้องการทำคือรับผลรวมของคอลัมน์ตัวเลขในฐานข้อมูล SQLite ของฉัน จากนั้นเก็บผลรวมนั้นไว้ในคอลัมน์อื่นในฐานข้อมูล ฉันได้ดูคำถามที่คล้ายกันที่ถูกถาม แต่ฉันไม่เห็นคำถามที่ใกล้พอที่จะทำให้มันเกิดขึ้น ความช่วยเหลือใด ๆ ที่คุณสามารถนำเสนอจะได้รับการชื่นชมอย่างมาก นี่คือสิ่งที่ฉันมี:

    public class DBAdapter {
static final String KEY_ROWID = "_id";
static final String KEY_TITLE = "title";
static final String KEY_GENRE = "genre";
static final String KEY_DATE = "date";
static final String KEY_PRICE = "price";
static final String KEY_TOTAL = "total";
static final String KEY_WHEREBOUGHT = "wherebought";
static final String TAG = "DBAdapter";

static final String DATABASE_NAME = "gamesDB";
static final String DATABASE_TABLE = "purchases";
static final int DATABASE_VERSION = 1;

static final String DATABASE_CREATE = "CREATE TABLE IF NOT EXISTS purchases(_id integer primary key autoincrement, "
        + "title text not null, genre text not null, date text not null, price double not null, total double, wherebought text not null);";

final Context context;

DatabaseHelper DBHelper;
SQLiteDatabase db;

public DBAdapter(Context ctx) {
    this.context = ctx;
    DBHelper = new DatabaseHelper(context);
}

private static class DatabaseHelper extends SQLiteOpenHelper {
    DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        try {
            db.execSQL(DATABASE_CREATE);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
                + newVersion + ", which will destroy all old data");
        db.execSQL("DROP TABLE IF EXISTS purchases");
        onCreate(db);
    }
}





// ---opens the database---
public DBAdapter open() throws SQLException {
    db = DBHelper.getWritableDatabase();
    return this;
}

// ---closes the database---
public void close() {
    DBHelper.close();
}

// ---insert a record into the database---
public long insertRecord(String title, String genre, String date,
        double price, String wherebought) {
    ContentValues initialValues = new ContentValues();
    initialValues.put(KEY_TITLE, title);
    initialValues.put(KEY_GENRE, genre);
    initialValues.put(KEY_DATE, date);
    initialValues.put(KEY_PRICE, price);
    initialValues.put(KEY_WHEREBOUGHT, wherebought);
    //initialValues.put(KEY_TOTAL, total);
    return db.insert(DATABASE_TABLE, null, initialValues);}


    public void calculateTotal() {

         float columntotal = 0;
         Cursor cursor1 = db.rawQuery(
             "SELECT SUM(price) FROM DATABASE_TABLE", null);
               if(cursor1.moveToFirst()) {
                columntotal = cursor1.getFloat(0);
             }
           cursor1.close();


                      db.rawQuery("INSERT INTO (DATABASE_TABLE) VALUE(columntotal)", null);}






//delete all records

public void deleteAll() {
    context.deleteDatabase (DATABASE_NAME) ;

}




// ---deletes a particular record---
public boolean deleteRecord(long rowId) {
    return db.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;
}

// ---retrieves all the records---
public Cursor getAllRecords() {
    return db.query(DATABASE_TABLE, new String[] { KEY_ROWID, KEY_TITLE,
            KEY_GENRE, KEY_DATE, KEY_PRICE, KEY_WHEREBOUGHT }, null, null,
            null, null, null);
}

// ---retrieves a particular record---
public Cursor getRecord(long rowId) throws SQLException {
    Cursor mCursor = db.query(true, DATABASE_TABLE, new String[] {
            KEY_ROWID, KEY_TITLE, KEY_GENRE, KEY_DATE, KEY_PRICE,
            KEY_WHEREBOUGHT }, KEY_ROWID + "=" + rowId, null, null, null,
            null, null);
    if (mCursor != null) {
        mCursor.moveToFirst();
    }
    return mCursor;
}

// ---updates a record---
public boolean updateRecord(long rowId, String title, String genre,
        String date, double price, String wherebought) {
    ContentValues args = new ContentValues();
    args.put(KEY_TITLE, title);
    args.put(KEY_GENRE, genre);
    args.put(KEY_DATE, date);
    args.put(KEY_PRICE, price);
    args.put(KEY_WHEREBOUGHT, wherebought);
    return db.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) > 0;
}

}

ตอนนี้โค้ดมีลักษณะเช่นนี้ และมันบอกฉันว่าไม่มีคอลัมน์ดังกล่าวสำหรับคอลัมน์ columntotal แต่ไม่ควรจะเป็นคอลัมน์ มันเป็นผลรวมที่กำลังดำเนินการ...ฉันมี columntotal ในตำแหน่งที่ไม่ถูกต้องในคำสั่ง INSERT หรือไม่

 public float calculateTotal() {

     float columntotal = 0;
     Cursor cursor1 = db.rawQuery(
         "SELECT SUM(price) FROM purchases", null);
           if(cursor1.moveToFirst()) {
            columntotal = cursor1.getFloat(0);
         }
       cursor1.close();

       return columntotal;}

  public void insertTotal() {
    db.rawQuery("INSERT INTO purchases(total) VALUES(columntotal)", null);

person user3116503    schedule 18.12.2013    source แหล่งที่มา
comment
ขอขอบคุณ: JosefN. มีคำแนะนำเกี่ยวกับไวยากรณ์ในการไปจากสิ่งที่ฉันมีไปจนถึงสิ่งที่คุณแนะนำหรือไม่   -  person user3116503    schedule 18.12.2013
comment
หากฐานข้อมูลของคุณรองรับการเลือกย่อยคุณสามารถทำได้ดังนี้: INSERT INTO table2 (columnForTotal) VALUES ( SELECT SUM(price) FROM table1 ); วิธีดำเนินการใน java คือการบ้านของคุณ :)   -  person JosefN    schedule 18.12.2013
comment
ฉันใช้ rawQuery เพราะเมื่อฉันลองใช้ execSQL ฉันได้รับข้อผิดพลาดแจ้งว่าควรใช้ query() แทน...ฉันใช้วิธีผิดหรือเปล่า   -  person user3116503    schedule 18.12.2013
comment
คุณช่วยกรุณาโพสต์โค้ดทั้งหมดเพื่อให้สามารถวิเคราะห์ได้ว่าใครผิด ขอบคุณ   -  person JosefN    schedule 18.12.2013
comment
ไม่เคยใช้ SQLite แต่บนสมมติฐานที่ว่ามันเป็นเพียงฐานข้อมูล sql .... คำสั่งแทรกของคุณดูไม่ถูกต้อง โดยปกติแล้วจะแทรกลงในค่า ‹table› ( col1, col2 ) ( val1, val2 )   -  person DaveH    schedule 18.12.2013
comment
ฉันไม่แน่ใจด้วยว่าโค้ดนี้พยายามทำอะไร - ดูเหมือนว่าคุณกำลังเพิ่มคอลัมน์ราคาในทุกแถวของตารางและแทรกลงในแถวใหม่ในตารางเดียวกัน คุณกำลังพยายามใช้กระบวนการทางธุรกิจใด   -  person DaveH    schedule 19.12.2013
comment
ฉันต้องการที่จะจัดเก็บผลรวมสะสมในคอลัมน์แยกต่างหากเมื่อมีการเพิ่มรายการใหม่ลงในฐานข้อมูล ดังนั้นฉันจึงสามารถแสดงจำนวนเงินที่ใช้ไป ณ จุดใดก็ตาม   -  person user3116503    schedule 19.12.2013
comment
เป็นไปได้ที่ซ้ำกันของ ข้อมูลไม่ได้แทรกลงใน SQLite DB   -  person CL.    schedule 19.12.2013