首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在更新时覆盖我的数据库

如何在更新时覆盖我的数据库
EN

Stack Overflow用户
提问于 2011-12-04 23:53:32
回答 2查看 484关注 0票数 0

我在一个数据库中徘徊,我从rss.My问题中得到的一些消息是,我希望新的提要覆盖旧的提要。我希望每次在我的数据库中有10条新闻,但现在我每次刷新10条新闻。

在网上搜索,我发现解决方案一定是你帮我做的onUpgrade method.Could ?这就是我现在使用的onUpgrade:

代码语言:javascript
复制
public void onUpgrade (SQLiteDatabase db,int oldVersion, int newVersion){
    android.util.Log.w("Constants",
            "Upgrading database, which will destroy all data"); 
    db.execSQL("DROP TABLE IF EXISTS myDB");
    onCreate(db);

}

编辑

代码语言:javascript
复制
public void createEntry(String string,String string2,String string3,String string4,String string5){
    ContentValues cv=new ContentValues();
    cv.put(DBHelper.TITLE, string);
    cv.put(DBHelper.AGONISTIKI, string2);
    cv.put(DBHelper.SKOR, string3);
    cv.put(DBHelper.GIPEDO, string4);
    cv.put(DBHelper.DATE, string5);
    try
    {
        ourDatabase.insert("osfpDB",null,cv);
    }
    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
    }

}
public void update(String string,String string2,String string3,String string4,String string5){
    ContentValues cv=new ContentValues();
    cv.put(DBHelper.TITLE, string);
    cv.put(DBHelper.AGONISTIKI, string2);
    cv.put(DBHelper.SKOR, string3);
    cv.put(DBHelper.GIPEDO, string4);
    cv.put(DBHelper.DATE, string5);
    try
    {
        ourDatabase.update("osfpDB",cv,DBHelper.ROWID,null);
    }
    catch(Exception e)
    {
        Log.e("DB ERROR ON .UPDATE", e.toString()); // prints the error message to the log
        e.printStackTrace(); // prints the stack trace to the log
    }

}

代码语言:javascript
复制
 ArrayList<HashMap<String, String>> List_agones = new ArrayList<HashMap<String, String>>(messages.size());
            for (Message2 msg : messages){

                des.add(msg.getDescription());//keimeno
                SK.add(msg.getskor());
                GOALA.add(msg.getgoal1());
                GOALB.add(msg.getgoal2());
                TITLES.add(msg.getTitle());
                AGONISTIKI.add(msg.getagonistiki());


                 HashMap<String, String> map = new HashMap<String, String>();
                    map.put("agon", msg.getagonistiki());

                map.put("name", msg.getTitle());
                map.put("date", msg.getDate());
                map.put("gip", msg.getgipedo());

                map.put("SK", msg.getskor());

               List_agones.add(map);

                ListAdapter mSchedule = new SimpleAdapter(this, List_agones, R.layout.agonesrow,
                            new String[] {"agon","name", "date","gip", "SK"}, new int[] {R.id.TextView00,R.id.TextView01, R.id.TextView02, R.id.TextView04, R.id.TextView03});
                this.setListAdapter(mSchedule);


                //grafei stin vasi dedomenwn
                //-------------------------
                HotOrNot entry=new HotOrNot(agones.this);

                   entry.open();
                   if(map== null){

                       Toast.makeText(agones.this, "1",
                                Toast.LENGTH_SHORT).show();
                      entry.createEntry(msg.getTitle(),msg.getagonistiki(),msg.getskor(),msg.getgipedo(),msg.getDate());
                   }else{

                       Toast.makeText(agones.this, "2",
                                Toast.LENGTH_SHORT).show();
                      entry.update(msg.getTitle(),msg.getagonistiki(),msg.getskor(),msg.getgipedo(),msg.getDate());
                   }

                   entry.close();
                //----------------------------------------
EN

回答 2

Stack Overflow用户

发布于 2011-12-05 00:02:45

当用户更新应用程序和数据库的版本时,将调用onUpgrade,并处理将数据从旧的DB版本移植到新的版本。可以使用SqlLiteDatabase类对数据库中的记录调用insert、update和delete。所以你不得不说这样的话:

代码语言:javascript
复制
if NumberOfRecords == 10
   delete oldest recodr
insert new record

您可以在http://www.vogella.de/articles/AndroidSQLite/article.html中看到插入、更新和删除方法的实现。

票数 0
EN

Stack Overflow用户

发布于 2011-12-05 00:04:00

对于新提要,您不必删除并重新创建数据库。只需更新数据库中的10行即可。

编辑:

我现在正在工作,没有太多的时间去看细节,你应该做的是这样的(我只添加了行id ),其中rowId是1到10。

代码语言:javascript
复制
public void update(String string,String string2,String string3,String string4,String string5, rowId){
    ContentValues cv=new ContentValues();
    cv.put(DBHelper.TITLE, string);
    cv.put(DBHelper.AGONISTIKI, string2);
    cv.put(DBHelper.SKOR, string3);
    cv.put(DBHelper.GIPEDO, string4);
    cv.put(DBHelper.DATE, string5);
    try
    {
        ourDatabase.update("osfpDB",cv,rowId,null);
    }
    catch(Exception e)
    {
        Log.e("DB ERROR ON .UPDATE", e.toString()); // prints the error message to the log
        e.printStackTrace(); // prints the stack trace to the log
    }

}

因此,您需要传入每次要更新的行id。在循环中。创建一个具有行id的计数器,例如:

代码语言:javascript
复制
for (int i = 1; i <= 10; i++)
{
     update(string1, string2, string 3 /*blah blah blah*/, i);
}

。为你做更新。

另一件需要注意的事情是,在创建数据库时,插入一个10行的虚拟数据。在执行任何更新之前,应该有10行(或所需的w/e行数)。如果记录不存在。更新将失败。我会在工作之余更深入地研究你的代码。抱歉的。

编辑:

好的。就像这样。但是我不明白你的createEntry有什么用。介意展示代码或解释吗?就像我说的。插入10个空行并对其进行更新。晚些时候。

代码语言:javascript
复制
 int rowId = 1;
 for (Message2 msg : messages){

            des.add(msg.getDescription());//keimeno
            SK.add(msg.getskor());
            GOALA.add(msg.getgoal1());
            GOALB.add(msg.getgoal2());
            TITLES.add(msg.getTitle());
            AGONISTIKI.add(msg.getagonistiki());


             HashMap<String, String> map = new HashMap<String, String>();
                map.put("agon", msg.getagonistiki());

            map.put("name", msg.getTitle());
            map.put("date", msg.getDate());
            map.put("gip", msg.getgipedo());

            map.put("SK", msg.getskor());

           List_agones.add(map);

            ListAdapter mSchedule = new SimpleAdapter(this, List_agones, R.layout.agonesrow,
                        new String[] {"agon","name", "date","gip", "SK"}, new int[] {R.id.TextView00,R.id.TextView01, R.id.TextView02, R.id.TextView04, R.id.TextView03});
            this.setListAdapter(mSchedule);


            //grafei stin vasi dedomenwn
            //-------------------------
            HotOrNot entry=new HotOrNot(agones.this);

               entry.open();
               if(map== null){

                   Toast.makeText(agones.this, "1",
                            Toast.LENGTH_SHORT).show();
                  entry.createEntry(msg.getTitle(),msg.getagonistiki(),msg.getskor(),msg.getgipedo(),msg.getDate());
               }else{

                   Toast.makeText(agones.this, "2",
                            Toast.LENGTH_SHORT).show();
                  entry.update(msg.getTitle(),msg.getagonistiki(),msg.getskor(),msg.getgipedo(),msg.getDate(), rowId++);
               }

               entry.close();
            //----------------------------------------
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8376487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档