成功创建了database,而且能成功insert第一行。
问题来了,从第二行开始,每一次添加都会创建了一行新的数据,然后用这些数据覆盖了以前的数据。
例子:
第一次添加有一行:id:1 name:pad age:11
第二次添加有两行: id:2 name:abc age:20
id:2 name:abc age:20
我已经在创建表的时候id设置为integer primary key autoincrement not null为什么会这样呢?
一下是我调用insert的代码
private static DBAdapter AssistentsDBAdapter;
if(AssistentsDBAdapter.insertItem(category, description, priority, stime, etime)==-1){
RString += "\nInsertion Error";
}else{
RString += "\nInsertion Success";
}
下面是我的DBAdapter insert部分代码以及类借口:
public DBAdapter(Context ctx,String TableName){
this.DATABASE_TABLE = TableName;
this.context=ctx;
DBHelper=new DatabaseHelper(context);
}
public long insertItem(String category, String description, int priority, String stime, String etime){
ContentValues initialValues = new ContentValues();
initialValues.put(KEY_category, category);
initialValues.put(KEY_DESCRIPTION, description);
initialValues.put(KEY_PRIORITY, priority);
initialValues.put(KEY_STIME, stime);
initialValues.put(KEY_ETIME, etime);
return db.insert(DATABASE_TABLE, null, initialValues);
}
问题来了,从第二行开始,每一次添加都会创建了一行新的数据,然后用这些数据覆盖了以前的数据。
例子:
第一次添加有一行:id:1 name:pad age:11
第二次添加有两行: id:2 name:abc age:20
id:2 name:abc age:20
我已经在创建表的时候id设置为integer primary key autoincrement not null为什么会这样呢?
一下是我调用insert的代码
private static DBAdapter AssistentsDBAdapter;
if(AssistentsDBAdapter.insertItem(category, description, priority, stime, etime)==-1){
RString += "\nInsertion Error";
}else{
RString += "\nInsertion Success";
}
下面是我的DBAdapter insert部分代码以及类借口:
public DBAdapter(Context ctx,String TableName){
this.DATABASE_TABLE = TableName;
this.context=ctx;
DBHelper=new DatabaseHelper(context);
}
public long insertItem(String category, String description, int priority, String stime, String etime){
ContentValues initialValues = new ContentValues();
initialValues.put(KEY_category, category);
initialValues.put(KEY_DESCRIPTION, description);
initialValues.put(KEY_PRIORITY, priority);
initialValues.put(KEY_STIME, stime);
initialValues.put(KEY_ETIME, etime);
return db.insert(DATABASE_TABLE, null, initialValues);
}
private static final String DATABASE_CREATE =
"create table " + DATABASE_TABLE + "(_id integer primary key autoincrement not null, "
+ "category text not null, description text, "
+ "priority int not null,"
+ "stime text not null," + "etime text not null);";
以及SQLiteOpenHelper的借口
private static class DatabaseHelper extends SQLiteOpenHelper{
DatabaseHelper(Context context){
super(context,DATABASE_NAME,null,DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db){
db.execSQL(DATABASE_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion){
Log.w(TAG, "Upgrading database from version " + oldVersion + "to" + newVersion + ", which will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS"+DATABASE_TABLE);
onCreate(db);
}
}
if(c.moveToFirst()){
do{
map = new HashMap<String,String>();//改成map.clear()不能正常工作
map.put("ID", c.getString(0));
map.put("CATEGORY", c.getString(1));
map.put("DESCRIPTION",c.getString(2));
map.put("PRIORITY", c.getString(3));
map.put("STIME", c.getString(4));
map.put("ETIME", c.getString(5));
list.add(map);
}while(c.moveToNext());
}