android - SQLite - 按 id 删除不删除表行

标签 android database sqlite model-view-controller android-sqlite

在我的数据库中,我有一个名为 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);

在扩展SQLiteHelperMySQLiteHelper中,方法如下:

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/

相关文章:

android - 是否可以将 SQLiteDatabase 转换为全局变量?

android - 您如何在 Android 上设置人行横道以从本地外部存储加载文件?

SQL Postgres 使引用无效 ID 的行无效

javascript - 从表单进行地理位置定位

Android - 多线程导致应用程序崩溃

android - 从 android JB 4.1.1 中的命令行进行蓝牙配对

MySQL 查询具有最近日期的行

java - SQLite数据库图形错误

java - SQLite 保存日期 12/31/69?

java - 选择每个项目的最新日期并在 sqlite 中获取总和