stud91
stud91

Reputation: 1854

SQLite Database inserting only last record - Android

My app inserts 16 records into the database upon startup. However when i output these records 1 record (Union Restaurant) is being repeated 16 times. RLocationDatabase.java creates the database. RDatabaseModel.java is the structure of the contents of the database. MainActivity.java executes the app and inserts records.

RLocationDatabase.java

public class RLocationDatabase extends SQLiteOpenHelper {

private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "RGeoDbase";

public static final String TABLE_RG = "RGeoDbase";
public static final String PR_KEY = "ID";
public static final String R_ID = "RestaurantID";
public static final String R_Name = "Name";
public static final String R_Latitude = "Latitude";
public static final String R_Longitude = "Longitude";

public static final String [] COLUMNS = {PR_KEY,R_ID,R_Name,R_Latitude,R_Longitude};


public RLocationDatabase(Context context){
    super(context, DATABASE_NAME, null, DATABASE_VERSION);  
}

@Override
public void onCreate(SQLiteDatabase data){

    String CREATE_DB = "CREATE TABLE RGeoDbase ( " + "ID VARCHAR PRIMARY KEY, " + "Name TEXT, "
                        + "Latitude DECIMAL(10,8), " + "Longitude DECIMAL(11,8) )";

    data.execSQL(CREATE_DB);
}

@Override
public void onUpgrade(SQLiteDatabase data, int oldV, int newV){

    data.execSQL("DROP TABLE IF EXISTS RGeoDbase");

    this.onCreate(data);
}

public boolean insertRecord(String name, double latitude, double longitude){
    SQLiteDatabase dbase = this.getWritableDatabase();
    ContentValues values = new ContentValues();

    //values.put(R_ID, r_id);
    values.put(R_Name, name);
    values.put(R_Latitude, latitude);
    values.put(R_Longitude, longitude);

    dbase.insert(TABLE_RG, null, values);
    return true;
}
/*
public Cursor getData(String id){
    SQLiteDatabase dbase = this.getWritableDatabase();
    Cursor cursor = dbase.rawQuery("SELECT * FROM RGeoDbase WHERE Restaurant_ID="+id+"", null);
    return cursor;
}*/

@SuppressWarnings("rawtypes")
public ArrayList<RDatabaseModel> getAllData(){
    RDatabaseModel model = new RDatabaseModel();
    ArrayList<RDatabaseModel> list = new ArrayList<RDatabaseModel>();
    SQLiteDatabase dbase = this.getReadableDatabase();

    Cursor cursor = dbase.rawQuery("SELECT * FROM RGeoDbase", null);
    cursor.moveToFirst();
    while(!cursor.isAfterLast()){
        //model.setRestaurantID(cursor.getString(cursor.getColumnIndex(R_ID)));
        model.setName(cursor.getString(cursor.getColumnIndex(R_Name)));
        model.setLatitude(cursor.getDouble(cursor.getColumnIndex(R_Latitude)));
        model.setLongitude(cursor.getDouble(cursor.getColumnIndex(R_Longitude)));

        list.add(model);
        cursor.moveToNext();
    }
    return list;
}

public void close(){
    this.close();
}
}

RDatabaseModel.java

public class RDatabaseModel {

private String name;
private double latitude;
private double longitude;

public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public double getLatitude() {
    return latitude;
}
public void setLatitude(double latitude) {
    this.latitude = latitude;
}
public double getLongitude() {
    return longitude;
}
public void setLongitude(double longitude) {
    this.longitude = longitude;
}
}

MainActivity.java

public class MainActivity extends Activity {
public static RLocationDatabase myDatabase;

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        myDatabase = new RLocationDatabase(this);

        buildDatabase();
        setContentView(R.layout.activity_main);

ArrayList<RDatabaseModel> a = myDatabase.getAllData();
        RDatabaseModel rd;
        for(int i=0; i<a.size(); i++){
            rd = a.get(i);
            System.out.println(rd.getName());
        }

    }

public void buildDatabase(){

        if(!myDatabase.insertRecord("Bijas Vegetarian", 22.28416252, 114.13412900)){
            Log.v("1", "error inserting data #1"); 
        }
        myDatabase.insertRecord("Delifrance", 22.28328514, 114.13483800);
        myDatabase.insertRecord("Ebeneezer's Kebabs and Pizzeria", 22.28362400, 114.13973600);
        myDatabase.insertRecord("Bay View Restaurant", 22.26952800, 114.12982000);
        myDatabase.insertRecord("C.C.Canteen", 22.28003600, 114.13058000);
        myDatabase.insertRecord("Cafe 330", 22.28279200, 114.13907500);
        myDatabase.insertRecord("Fong Shu Chen Amenities Centre Restaurant", 22.28383400, 114.13974600);
        myDatabase.insertRecord("FRU:YO Factory", 22.28270600, 114.13874000);
        myDatabase.insertRecord("Garden Patio", 22.26732000, 114.12837100);
        myDatabase.insertRecord("Groove Cafe", 22.28312300, 114.13485300);
        if(!myDatabase.insertRecord("Ho Tim Hall Restaurant", 22.28406700, 114.13283700)){
            System.out.println("error inserting data #11"); 
        }
        myDatabase.insertRecord("Maxim's Food 2", 22.28309900, 114.13949100);
        myDatabase.insertRecord("Pacific Coffee Company", 22.28363500, 114.13966600);
        myDatabase.insertRecord("Starbucks Coffee (Main Campus)", 22.28312100, 114.13803300);
        if(!myDatabase.insertRecord("Subway Sandwiches", 22.28264100, 114.13850600)){
            Log.v("15","error inserting #15");
        }
        myDatabase.insertRecord("Union Restaurant", 22.28315100, 114.13590700);
    }
}

Upvotes: 0

Views: 340

Answers (2)

sunil
sunil

Reputation: 300

give id as id integer primary key autoincrement

Upvotes: 0

Ivvan
Ivvan

Reputation: 730

May be you need to create your RDatabaseModel object directly in while loop.

while(!cursor.isAfterLast()){
    RDatabaseModel model = new RDatabaseModel(); // here
    model.setName(cursor.getString(cursor.getColumnIndex(R_Name)));
    model.setLatitude(cursor.getDouble(cursor.getColumnIndex(R_Latitude)));
    model.setLongitude(cursor.getDouble(cursor.getColumnIndex(R_Longitude)));

    list.add(model);
    cursor.moveToNext();
}

Upvotes: 1

Related Questions