Coder
Coder

Reputation: 3120

Android SQlite not updating the data

My DatabaseHandler Class:

public class DatabaseHandler extends SQLiteOpenHelper {

    private static final String LOG_TAG = "debugger";

    //database version
    private static final int DATABASE_VERSION = 1;
    //database name;
    private static final String DATABASE_NAME = "appdb";

    private static final String TABLE_PROJECT = "projects";     
    //Project Table Columns
    private static String PROJECT_ID = "Project_id";
    private static final String PROJECT_NAME = "Name";
    private static final String PROJECT_DESCRIPTION = "Description";
    private static final String CLIENT_NAME = "Client_Name";
    private static final String LOCATION = "Location";

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

    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        Log.d(LOG_TAG, "Executing OnCreate");   
        createProjectTable(db);     
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {      

    }

    private void createProjectTable(SQLiteDatabase db){
        String CREATE_PROJECT_TABLE = "CREATE TABLE " + TABLE_PROJECT + "("
        + PROJECT_ID + " INTEGER PRIMARY KEY, "
        + PROJECT_NAME + " TEXT, "
        + PROJECT_DESCRIPTION + " TEXT, "
        + CLIENT_NAME + " TEXT, "
        + LOCATION + " TEXT );";
        Log.d(LOG_TAG, "Creating Project table --> " + CREATE_PROJECT_TABLE);
        db.execSQL(CREATE_PROJECT_TABLE);
    }   

    public void addProject(Project project){
         SQLiteDatabase db = this.getWritableDatabase();
         ContentValues values = new ContentValues();
         values.put(PROJECT_NAME, project.getName()); // Contact Name
         values.put(PROJECT_DESCRIPTION, project.getDescription()); // Contact Phone
         values.put(CLIENT_NAME, project.getClient_name());
         values.put(LOCATION, project.getLocation());
         // Inserting Row
         Log.d(LOG_TAG, "Inserting Project....");
         db.insert(TABLE_PROJECT, null, values);
         Log.d(LOG_TAG, "Inserted successfullyt....");
         db.close(); // Closing database connection
    }

    public List<Project> getProjects(){
        List<Project> projects = new ArrayList<Project>();
        String selectQuery = "SELECT  * FROM " + TABLE_PROJECT;
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);
        if(cursor.getCount() != 0){
            Log.d(LOG_TAG, "Projects found...");
          if (cursor.moveToFirst()) {
            do {
                Project project = new Project();
                project.setName(cursor.getString(1));
                project.setClient_name(cursor.getString(2));
                project.setDescription(cursor.getString(3));
                project.setLocation(cursor.getString(4));
                projects.add(project);
            } while (cursor.moveToNext());
          }
        }
      return projects;
    }

    public void updateProject(Project project){
         SQLiteDatabase db = this.getWritableDatabase();
         ContentValues values = new ContentValues();
         values.put(PROJECT_NAME, project.getName()); // Contact Name
         values.put(PROJECT_DESCRIPTION, project.getDescription()); // Contact Phone
         values.put(CLIENT_NAME, project.getClient_name());
         values.put(LOCATION, project.getLocation());
         String where = PROJECT_ID + " = ? ";       
         String [] value = { String.valueOf(project.getProject_id()) };
         try{
             int count = db.update(TABLE_PROJECT, values, where , value);
             Log.d(LOG_TAG, "Updated rows -> " + count);
         }catch (Exception e) {
            e.printStackTrace();
        }
        db.close();
    }
}

In my activity

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(...);
dbHelper = new DatabaseHandler(this);
}

and when user clicks update button I call update method

dbHelper.updateProject(newProject);

In my updateProject method in dbHelper the value of count is 0.

And dbHelper.getProjects() returns me old values even if this method is called after update method.

I have checked using debugger that new values are passed to the updateProject method but they are not getting reflected. The method addProject works fine.

The Project class

public class Project implements Serializable{

    private static final long serialVersionUID = 1L;
    private int project_id;
    private String name;
    private String description;
    private String client_name;
    private String location;

    public Project(){

    }

    public Project(int project_id, String name, String client_name,String description, String location){
        this.project_id = project_id;
        this.name = name;
        this.description = description;
        this.client_name = client_name;
        this.location = location;
    }

    public int getProject_id() {
        return project_id;
    }

    public void setProject_id(int project_id) {
        this.project_id = project_id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getClient_name() {
        return client_name;
    }

    public void setClient_name(String client_name) {
        this.client_name = client_name;
    }

    public String getLocation() {
        return location;
    }

    public void setLocation(String location) {
        this.location = location;
    }

}

Anyone help please.

Upvotes: 1

Views: 1665

Answers (3)

Anirudha Agashe
Anirudha Agashe

Reputation: 3530

The project id is of int data type so you should use

  int value = project.getProject_id();

Upvotes: 1

Anukool
Anukool

Reputation: 5391

Use this -

String[] value = new String []{ String.valueOf(project.getProject_id()) };

Upvotes: 1

Deepzz
Deepzz

Reputation: 4571

Try this...

 String [] value = { Integer.toString(project.getProject_id()) };

Upvotes: 3

Related Questions