1

I am developing an application that uses a very simple database. I only need to save one description (STRING) that is a history result of application used by user. I have created a helper class called ScoreHelper.

package com.example.cobaandroid;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class ScoreHelper extends SQLiteOpenHelper {

private static final int SCHEMA_VERSION = 1;
public ScoreHelper(Context context)
{
    super(context,"score.db",null,SCHEMA_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
    // TODO Auto-generated method stub
    //boolean dbExist = checkDataBase();
    db.execSQL("CREATE TABLE score (_id INTEGER PRIMARY KEY AUTOINCREMENT,nama VARCHAR,akurasi VARCHAR,keterangan VARCHAR);");

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // TODO Auto-generated method stub

}



public Cursor getAll()
{
    return(getReadableDatabase().rawQuery("SELECT _id,nama,akurasi,keterangan FROM score ORDER BY nama",null));
}

public void insert(String name,String akurasi,String keterangan)
{
    SQLiteDatabase db =this.getWritableDatabase();
    ContentValues cv = new ContentValues();
    cv.put("nama", name);
    cv.put("akurasi", akurasi);
    cv.put("keterangan", keterangan);
    db.insert("score", null, cv);
    db.close();
}

}

This is my main, called Analyze.java

public class Analyze extends Activity {
Cursor model = null;
ScoreHelper scoreHelper = null;
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_analyze);
    scoreHelper = new ScoreHelper(this);
    model = scoreHelper.getAll();
    final double totalAkurasi = hitungAkurasi(knn.length, knn, nama,listFileDataTest.length);
    insertScoreToDB(totalAkurasi);      
    Button scoreHistory = (Button)findViewById(R.id.scorebutton);
    scoreHistory.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent scoreIntent = new Intent(Analyze.this,CamScoreHistory.class);
            startActivity(scoreIntent);

        }
    });

}

private void insertScoreToDB(double akurasi)
{
    String dateCaptured = java.text.DateFormat.getDateTimeInstance().format(Calendar.getInstance().getTime());
    String concatDateandImg = "Image captured at " + dateCaptured;
    String keterangan = "";
    if(akurasi >= 83.333)
    {
        keterangan = "YES";
    }
    else
    {
        keterangan = "NO";
    }
    if(model.moveToFirst())
    {
        do
        {
            scoreHelper.insert(concatDateandImg, String.valueOf(akurasi), keterangan);
        }while(model.moveToNext());
    }

}

And this is the CamScoreHistory.java, the class where I want to show on a list the data in my DB

package com.example.cobaandroid;

import java.util.ArrayList;
import android.app.Activity;
import android.app.ListActivity;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.os.Bundle;
import android.widget.ArrayAdapter;

   public class CamScoreHistory extends ListActivity {
    Cursor model = null;
    ScoreHelper scoreHelper = null;
String nama= "";
String akurasi="";
String keterangan="";
@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    scoreHelper = new ScoreHelper(this);
    model = scoreHelper.getAll();
    if(model.moveToFirst())
    {
        do
        {
            nama = model.getString(model.getColumnIndex("nama"));
            akurasi = model.getString(model.getColumnIndex("akurasi"));
            keterangan = model.getString(model.getColumnIndex("keterangan"));
        }while(model.moveToNext());
    }

    ArrayList<String> results = new ArrayList<String>();
    results.add(nama+ " Akurasi " + akurasi + " Keterangan "+keterangan);
    this.setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,results));
}

}

The problem is, I am able to insert data to my DB, but it is always overwriting the previous data. All I want is the new data that inserted not overwrite the prev one.

midhunhk
  • 5,560
  • 7
  • 52
  • 83
bohr
  • 631
  • 2
  • 9
  • 29
  • Why your results.add() is outside of the while loop? That way you are just adding the last record in your DB into the ArrayList. – Siu Dec 04 '13 at 07:17
  • Also, in your getAll() function, you can simply use "SELECT * FROM score ORDER BY nama", when you want to retrieve all columns in table. – Siu Dec 04 '13 at 07:20

0 Answers0