我在一个数据库中徘徊,我从rss.My问题中得到的一些消息是,我希望新的提要覆盖旧的提要。我希望每次在我的数据库中有10条新闻,但现在我每次刷新10条新闻。
在网上搜索,我发现解决方案一定是你帮我做的onUpgrade method.Could ?这就是我现在使用的onUpgrade:
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);
}编辑
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
}
}和
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();
//----------------------------------------发布于 2011-12-05 00:02:45
当用户更新应用程序和数据库的版本时,将调用onUpgrade,并处理将数据从旧的DB版本移植到新的版本。可以使用SqlLiteDatabase类对数据库中的记录调用insert、update和delete。所以你不得不说这样的话:
if NumberOfRecords == 10
delete oldest recodr
insert new record您可以在http://www.vogella.de/articles/AndroidSQLite/article.html中看到插入、更新和删除方法的实现。
发布于 2011-12-05 00:04:00
对于新提要,您不必删除并重新创建数据库。只需更新数据库中的10行即可。
编辑:
我现在正在工作,没有太多的时间去看细节,你应该做的是这样的(我只添加了行id ),其中rowId是1到10。
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的计数器,例如:
for (int i = 1; i <= 10; i++)
{
update(string1, string2, string 3 /*blah blah blah*/, i);
}。为你做更新。
另一件需要注意的事情是,在创建数据库时,插入一个10行的虚拟数据。在执行任何更新之前,应该有10行(或所需的w/e行数)。如果记录不存在。更新将失败。我会在工作之余更深入地研究你的代码。抱歉的。
编辑:
好的。就像这样。但是我不明白你的createEntry有什么用。介意展示代码或解释吗?就像我说的。插入10个空行并对其进行更新。晚些时候。
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();
//----------------------------------------https://stackoverflow.com/questions/8376487
复制相似问题