在我的数据库中,我有一个名为 Place(id,place_name,latitude,longitude,place_details)
我想删除 ListView 的项目点击上的一行。
我试过以下方法:
Place.java
public class Place {
int _id;
private String _name;
private double _latitude,_longitude;
private String _placedetails;
public Place(int id, String name, double latitude, double longitude,String placedetails)
{
this._id = id;
this._name = name;
this._latitude = latitude;
this._longitude = longitude;
this._placedetails = placedetails;
}
public Place(String name, double latitude, double longitude,String placedetails)
{
this._name = name;
this._latitude = latitude;
this._longitude = longitude;
this._placedetails = placedetails;
}
public Place() {
}
public int getID(){
return this._id;
}
public void setID(int id){
this._id = id;
}
public void setname(String placename)
{
this._name = placename;
}
public String getname()
{
return this._name;
}
public void setlatitude(double latitude)
{
this._latitude=latitude;
}
public double getlatitude()
{
return this._latitude;
}
public void setlongitude(double longitude)
{
this._longitude = longitude;
}
public double getlongitude()
{
return this._longitude;
}
public void setPlacedetails(String placedetails)
{
this._placedetails = placedetails;
}
public String getplacedetails()
{
return this._placedetails;
}
}
我想在其中插入位置的 Activity 类似:
MySqliteHelper db = new MySqliteHelper(this);
db.addPlaces(new Place(myplacename, mylatitude, mylongitude, myplacedetails));
如此处解释:Android table creation Failure (near "autoincrement": syntax error)? ,我认为我不需要明确标识。它将为 Place 的每个对象创建。//我错了吗?
在ListView的onitemclicklistener中,删除地方的代码如下:
Place place = places_adapter.getItem(pos);
db.deletePlaces(place);
在扩展SQLiteHelper
的MySQLiteHelper中,方法如下:
public void addPlaces(Place place)
{
SQLiteDatabase db = this.getWritableDatabase();
ContentValues convalues = new ContentValues();
convalues.put(KEY_PLACENAME,place.getID());
convalues.put(KEY_PLACENAME,place.getname());
convalues.put(KEY_LATITUDE,place.getlatitude());
convalues.put(KEY_LONGITUDE,place.getlongitude());
convalues.put(KEY_PLACEDETAILS,place.getplacedetails());
db.insert(TABLE_NAME, null, convalues);
Log.d("my","db.insert(TABLE_NAME, null, convalues)");
Log.d("my", "Values inserted");
db.close();
}
public void deletePlaces(Place place)
{
SQLiteDatabase db = this.getWritableDatabase();
int id = place.getID();
Log.d("my",Integer.toString(id));
db.delete(TABLE_NAME, KEY_ID + " = ?",
new String[]{Integer.toString(id)} );
db.close();
}
删除时,在 logcat 中,id
的值始终显示为 0
....并且相应的表行未从数据库中删除。
如果有人知道有什么问题,请帮助我。
最佳答案
我解决了。
每次在数据库中插入记录时,不要忘记获取它的返回值...db.insert 返回长值,它不是 rowID。
所以我改变了
public void addPlaces(Place place){
db.insert(TABLE_NAME, null, convalues);
}
到
public long addPlaces(Place place){
long newRowId = db.insert(TABLE_NAME, null, convalues);
}
并在我插入位置的 Activity 中得到了这个 rowID:
Place place = new Place(myplacename, mylatitude, mylongitude, myplacedetails);
long tablerowid= db.addPlaces(place);
我还使用我的 setter 方法在此处设置了 rowID:
place.setID(tablerowid);
现在,我将 Place.java
中的所有 int
id 替换为 long
并实现了 deletePlaces() 方法,如下所示:
public void deletePlaces(Place place){
SQLiteDatabase db = this.getWritableDatabase();
long id = place.getID();
db.delete(TABLE_NAME, KEY_ID + " = ?",
new String[]{Long.toString(id)} );
db.close();
}
关于android - SQLite - 按 id 删除不删除表行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27592738/