110

これはばかげた質問かもしれませんが、私はSQLiteを初めて使用するため、これを理解できないようです。KEY_ROWID列、、、、およびKEY_NAMEを含むテーブルが1つあります。ユーザーが1つを選択して削除できるようにしたいと思います。誰かが私に始めるための指示を与えることができますか?私の質問は、その名前だけが与えられた行の実際の削除にあります。KAY_LATITUDEKEY_LONGITUDE

関連コード:

public class BeaconDatabase {

    public static final String KEY_ROWID = "_id";
    public static final String KEY_NAME = "beacon_name";
    public static final String KEY_LATITUDE = "beacon_lat";
    public static final String KEY_LONGITUDE = "beacon_lon";

    private static final String DATABASE_NAME ="BeaconDatabase";
    private static final String DATABASE_TABLE ="beaconTable";
    private static final int DATABASE_VERSION = 1;

    private DbHelper helper;
    private final Context context;
    private SQLiteDatabase db;

    public BeaconDatabase(Context context) {
        this.context = context;
    }

    public BeaconDatabase open() {
        helper = new DbHelper(this.context);
        db = helper.getWritableDatabase();
        return this;
    }

    public void close() {
        helper.close();
    }

    public long createEntry(String name, Double lat, Double lon) {
        ContentValues cv = new ContentValues();
        cv.put(KEY_NAME, name);
        cv.put(KEY_LATITUDE, lat);
        cv.put(KEY_LONGITUDE, lon);
        return db.insert(DATABASE_TABLE, null, cv);
    }

    public void deleteEntry(long row) {

              // Deletes a row given its rowId, but I want to be able to pass
              // in the name of the KEY_NAME and have it delete that row.
              //db.delete(DATABASE_TABLE, KEY_ROWID + "=" + row, null);
    }

    public String getData() {
        String[] columns = { KEY_ROWID, KEY_NAME, KEY_LATITUDE, KEY_LONGITUDE };
        Cursor cursor = db.query(DATABASE_TABLE, columns, null, null, null, null, null);
        String result = "";

        int iRow = cursor.getColumnIndex(KEY_ROWID);
        int iName = cursor.getColumnIndex(KEY_NAME);
        int iLat = cursor.getColumnIndex(KEY_LATITUDE);
        int iLon = cursor.getColumnIndex(KEY_LONGITUDE);

        for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
            result += cursor.getString(iRow) + ": " + cursor.getString(iName) + " - " + cursor.getDouble(iLat) + " latitude " + cursor.getDouble(iLon) + " longitude\n";
        }

        return result;

    }

    private static class DbHelper extends SQLiteOpenHelper {

        public DbHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL("CREATE TABLE " +  DATABASE_TABLE + " (" + 
                    KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                    KEY_NAME + " TEXT NOT NULL, " +
                    KEY_LATITUDE + " DOUBLE, " +
                    KEY_LONGITUDE + " DOUBLE);"
            );
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE);
            onCreate(db);
        }
    }
}
4

18 に答える 18

193

次のように試すことができます:

 //---deletes a particular title---
public boolean deleteTitle(String name) 
{
    return db.delete(DATABASE_TABLE, KEY_NAME + "=" + name, null) > 0;
}

また

public boolean deleteTitle(String name) 
{
    return db.delete(DATABASE_TABLE, KEY_NAME + "=?", new String[]{name}) > 0;
}
于 2011-09-22T06:21:52.933 に答える
161

そのようにしてみてください。解決策が得られますように

String table = "beaconTable";
String whereClause = "_id=?";
String[] whereArgs = new String[] { String.valueOf(row) };
db.delete(table, whereClause, whereArgs);
于 2011-09-22T06:26:36.397 に答える
61

whereargs も使用することをお勧めします。

db.delete("tablename","id=? and name=?",new String[]{"1","jack"});

これは、次のコマンドを使用するようなものです。

delete from tablename where id='1' and name ='jack'

このような方法で削除機能を使用すると、SQL インジェクションが削除されるため、適切です。

于 2015-05-04T06:58:27.093 に答える
17

あなたの質問を理解するまで、削除する行を選択するための 2 つの条件を設定する必要があります。そのためには、次のことを行う必要があります。

public void deleteEntry(long row,String key_name) {

      db.delete(DATABASE_TABLE, KEY_ROWID + "=" + row + " and " + KEY_NAME + "=" + key_name, null);

      /*if you just have key_name to select a row,you can ignore passing rowid(here-row) and use:

      db.delete(DATABASE_TABLE, KEY_NAME + "=" + key_name, null);
      */  

}
于 2011-09-22T06:16:51.330 に答える
14

このコードを試してください

public void deleteRow(String value)
{
SQLiteDatabase db = this.getWritableDatabase();       
db.execSQL("DELETE FROM " + TABLE_NAME+ " WHERE "+COlUMN_NAME+"='"+value+"'");
db.close();
}
于 2016-04-06T09:46:01.030 に答える
8

このコードを試してください...

private static final String mname = "'USERNAME'";
public void deleteContact()
{
    db.delete(TABLE_CONTACTS, KEY_NAME + "=" + mname, null);
}
于 2013-02-07T07:27:15.283 に答える
5

これは完全に機能します:

public boolean deleteSingleRow(String rowId) 
{
    return db.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;
}

この例も参照できます。

于 2012-04-27T09:37:08.453 に答える
3

SQLiteDatabaseを使用している場合 は、delete メソッドがあります

削除の定義

int delete (String table, String whereClause, String[] whereArgs)

実装例

これで、名前として引数を持つ deleteというメソッドを書くことができます

public void delete(String value) {
    db.delete(DATABASE_TABLE, KEY_NAME + "=?", new String[]{String.valueOf(value)});
}

すべてのレコードを削除したい場合は、上記のメソッドに null を渡すだけです。

public void delete() {
    db.delete(DATABASE_TABLE, null, null);
}

情報源

于 2016-12-16T14:51:58.520 に答える
2

テーブルから行を削除するには、行を識別する選択基準をdelete()メソッドに提供する必要があります。このメカニズムは、メソッドへの選択引数と同じように機能しquery()ます。選択指定を選択節 (where 節) と選択引数に分割します。

    SQLiteDatabase db  = this.getWritableDatabase();
     // Define 'where' part of query.
    String selection = Contract.COLUMN_COMPANY_ID + " =?  and "
                       + Contract.CLOUMN_TYPE +" =? ";
   // Specify arguments in placeholder order.
    String[] selectionArgs = { cid,mode };
    // Issue SQL statement.
    int deletedRows = db.delete(Contract.TABLE_NAME, 
                       selection, selectionArgs);
    return deletedRows;// no.of rows deleted.

メソッドの戻り値はdelete()、データベースから削除された行数を示します。

于 2018-03-29T13:26:34.350 に答える
1

上記の解決策がうまくいかない場合は、これも試してみてください。

public boolean deleteRow(String name) 
{
    return db.delete(DATABASE_TABLE, KEY_NAME + "='" + name +"' ;", null) > 0;
}
于 2016-07-21T12:23:21.060 に答える
0

これを試してください:

public void deleteEntry(long rowId) {
    database.delete(DATABASE_TABLE , KEY_ROWID 
        + " = " + rowId, null);}
于 2015-06-01T20:37:41.447 に答える
0
public boolean deleteRow(long l) {
    String where = "ID" + "=" + l;
    return db.delete(TABLE_COUNTRY, where, null) != 0;
}
于 2016-11-30T03:53:24.240 に答える