Android的SQLite的更新不及时的数据 [英] Android SQlite not updating the data

查看:210
本文介绍了Android的SQLite的更新不及时的数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的数据库处理器类别:

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();
    }
}

在我的活动

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

当用户点击更新按钮我称之为update方法

and when user clicks update button I call update method

dbHelper.updateProject(newProject);

在我的 updateProject 方法 dbHelper 计数值为0。

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

dbHelper.getProjects()即使这种方法的更新方法后,叫我返回旧值。

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

我已经使用了新的价值观传递给 updateProject 方法检查调试器,但他们没有得到体现。该方法 addProject 工作正常。

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.

Project类

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;
    }

}

任何帮助,请。

推荐答案

试试这个...

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

这篇关于Android的SQLite的更新不及时的数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆