特定のIDが指定された行を削除しようとしていますが、リストビューに更新が反映されていますが、その行は削除されません。同じプロセスはupdate
で動作しますが、削除はできません。ここでコードである:渡されるクリック商品のユーザがdelete
ボタンをクリック手段2 ==AndroidのSQLiteでIDによる行が削除されない
...
@Override
public void onPositiveClick(DialogFragment dialog, int which) {
//Shared Preferences
SharedPreferences pref = getSharedPreferences(EditLog.PREF_FILENAME, 0);
long id = 0;
String date = "";
String hours = "";
String lessonType = "";
String weatherCondition = "";
if (!(pref == null)) {
id = pref.getLong("rowId", 0);
date = pref.getString("date", "");
hours = pref.getString("hours", "");
lessonType = pref.getString("lessonType", "");
weatherCondition = pref.getString("weatherCondition", "");
}
if (which == 2) {
LessonLogDBHelper dbhelp = new LessonLogDBHelper(getApplicationContext());
final SQLiteDatabase db = dbhelp.getWritableDatabase();
db.delete(LessonLogContract.LogEntry.TABLE_NAME, "_id=?", new String[]{Long.toString(id)});
} else {
LessonLogDBHelper dbhelp = new LessonLogDBHelper(getApplicationContext());
final SQLiteDatabase db = dbhelp.getWritableDatabase();
final ContentValues values = new ContentValues();
values.put(LessonLogContract.LogEntry.CN_DATE, date);
values.put(LessonLogContract.LogEntry.CN_HOURS, hours);
values.put(LessonLogContract.LogEntry.CN_LESSON_TYPE, lessonType);
values.put(LessonLogContract.LogEntry.CN_WEATHER, weatherCondition);
db.update(LessonLogContract.LogEntry.TABLE_NAME, values, "_id=" + id, null);
}
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.content_main, new DrivingLog());
transaction.commit();
}
...
た場合
MainActivity.java、(dB単位)ID、および私はdelete
と呼んでいます。このプロセスは更新のために機能しますが、削除はできません。
EDIT:
何か奇妙なニートの事私が見つけた私はupdate
エントリーしようとすると、私はDBから任意の単一のエントリ削除になるということです。私が最初に更新しようとしないなら、私はできません。ここで
DEF、私のテーブルです:私は保存していなかった、私の[削除]ボタンをクリックしたときに
LessonLogContract
package com.example.name.drivinglessona3;
import android.provider.BaseColumns;
import android.util.StringBuilderPrinter;
public class LessonLogContract {
private LessonLogContract() {}
public static class LogEntry implements BaseColumns {
public static final String TABLE_NAME = "lesson";
public static final String CN_DATE = "date";
public static final String CN_HOURS = "hours";
public static final String CN_LESSON_TYPE = "lesson_type";
public static final String CN_WEATHER = "weather";
}
}
LessonLogDBHelper
package com.example.name.drivinglessona3;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class LessonLogDBHelper extends SQLiteOpenHelper {
// If you change the database schema, you must increment the database version.
private static final String SQL_CREATE_ENTRIES =
"CREATE TABLE " + LessonLogContract.LogEntry.TABLE_NAME + " (" +
LessonLogContract.LogEntry._ID + " INTEGER PRIMARY KEY," +
LessonLogContract.LogEntry.CN_DATE+ " TEXT," +
LessonLogContract.LogEntry.CN_HOURS+ " TEXT," +
LessonLogContract.LogEntry.CN_LESSON_TYPE+ " TEXT," +
LessonLogContract.LogEntry.CN_WEATHER + " TEXT)";
private static final String SQL_DELETE_ENTRIES =
"DROP TABLE IF EXISTS " + LessonLogContract.LogEntry.TABLE_NAME;
public static final int DATABASE_VERSION = 1;
public static final String DATABASE_NAME = "LogEntry.db";
public LessonLogDBHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public void onCreate(SQLiteDatabase db) {
db.execSQL(SQL_CREATE_ENTRIES);
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// This database is only a cache for online data, so its upgrade policy is
// to simply to discard the data and start over
db.execSQL(SQL_DELETE_ENTRIES);
onCreate(db);
}
public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
onUpgrade(db, oldVersion, newVersion);
}
}
は
を解決しました_id
をSharedPreferencesに変換したので、MainActivity
ではidの値が間違っていました。ただ、削除ラインにString.valueOf()代わりに持つLong.toString()を変更
public void delete(int id) {
SQLiteDatabase db = getWritableDatabase();
db.delete("MST_Item", "ItemID=" + id, null);
db.close();
}
db.deleteが実際に呼び出されているかどうか知っていますか? – M0rty
ええ、それは –
と呼ばれていますあなたのアイテムがクリックされていることを確認してください... ??? ....そしてまたここにスペースを残して..... "_id =?" –