在网上搜索我发现解决方案必须是onUpgrade
方法。你能帮我这么做吗?这就是我现在使用的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();
//----------------------------------------
答案 0 :(得分:0)
当用户更新应用程序和数据库的版本并处理将旧数据库版本的数据移植到新数据库时,将调用onUpgrade。您可以使用SqlLiteDatabase类对数据库中的记录调用插入,更新和删除。所以你必须这样说:
if NumberOfRecords == 10
delete oldest recodr
insert new record
您可以在此处查看插入,更新和删除方法的实现http://www.vogella.de/articles/AndroidSQLite/article.html。
答案 1 :(得分:0)
您不必删除并重新创建新Feed的数据库。只需更新数据库中的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个空行并对其进行更新。 Laters。
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();
//----------------------------------------