如何更新我的数据库

时间:2012-01-20 23:05:45

标签: android database sqlite

我创建了一个存储来自互联网数据的数据库。当有互联网连接时,我调用createEntry并将数据写入数据库。我的问题是,第二次使用互联网,新数据不会覆盖旧的,但创建新的条目。所以,我认为解决方案是从第二次用户有互联网连接更新我的数据库,所以每次都有相同数量的数据。我的问题是我不知道该怎么做。这是我第一次尝试SQLite和数据库。

这是我的createEntry:

public void createEntry(String title, String getagonistiki, String getskor,
            String getgipedo, String date, String getgoal1, String getgoal2,
            String teliko_skor) {
        // TODO Auto-generated method stub
        ContentValues cv = new ContentValues();
        cv.put(DBHelper.TITLE, title);
        cv.put(DBHelper.AGONISTIKI, getagonistiki);
        cv.put(DBHelper.SKOR, getskor);
        cv.put(DBHelper.GIPEDO, getgipedo);
        cv.put(DBHelper.DATE, date);
        cv.put(DBHelper.GOALA, getgoal1);
        cv.put(DBHelper.GOALB, getgoal2);
        cv.put(DBHelper.DESCRIPTION, teliko_skor);

        try {
            ourDatabase.insert("osfpDB", null, cv);
        } // ourDatabase.update("osfpDB",cv,DBHelper.ROWID,null);

        catch (Exception e) {
            Log.e("DB ERROR ON .INSERT", e.toString()); // prints the error
                                                        // message to the log
            e.printStackTrace(); // prints the stack trace to the log
        }
    }

这就是我在有互联网连接时打电话的地方:

HotOrNot entry = new HotOrNot(agones.this);

            entry.open();

            entry.createEntry(msg.getTitle(), msg.getagonistiki(), msg
                    .getskor(), msg.getgipedo(), msg.getDate(),msg.getgoal1(),msg.getgoal2(),msg.getDescription());

            // entry.update(msg.getTitle(),msg.getagonistiki(),msg.getskor(),msg.getgipedo(),msg.getDate());

            entry.close();

1 个答案:

答案 0 :(得分:3)

尝试此功能::

public void createEntry(String title, String getagonistiki, String getskor, String getgipedo, String date, String getgoal1, String getgoal2,
        String teliko_skor) {

    Cursor c = null;
    boolean isInserted = false;
    try {       
        c = ourDatabase.rawQuery("select "+DBHelper.TITLE+" from osfpDB", null);
        if(c != null){
            for(int i=0; i<c.getCount();i++){
                c.moveToPosition(i);
                if(c.getString(0).equals(title)){
                    Log.e("same title text means duplicate :",title+" : "+c.getString(0));
                    isInserted = true;
                    break;
                }
            }
        }

        ContentValues cv = new ContentValues();
        cv.put(DBHelper.TITLE, title);
        cv.put(DBHelper.AGONISTIKI, getagonistiki);
        cv.put(DBHelper.SKOR, getskor);
        cv.put(DBHelper.GIPEDO, getgipedo);
        cv.put(DBHelper.DATE, date);
        cv.put(DBHelper.GOALA, getgoal1);
        cv.put(DBHelper.GOALB, getgoal2);
        cv.put(DBHelper.DESCRIPTION, teliko_skor);

        Log.e("ourDatabase", "" + ourDatabase);

        if (ourDatabase == null) {
            ourDatabase = getWritableDatabase();
        }

        if(isInserted){
            ourDatabase.update("osfpDB", cv, null, null);
        }else{
            ourDatabase.insert("osfpDB", null, cv); 
        }
    } catch (Exception e) {
        Log.e("Exception in insert :", e.toString());
        e.printStackTrace();
    }
}


在您的问题中,我注意到您只想丢弃重复的记录,为此您不需要更新记录或不更改您的代码功能只需将主键设置到您的表'标题'列 - 这是不允许的插入重复的记录..(如果你有其他查询告诉我)

参考:Naming conventions