RecyclerView에 CardView가 있습니다. CardView를 LongClick하면 DialogFragment가 열리고 CardView와 SQLite 데이터베이스에서 가져온 데이터가 삭제됩니다. "확인"을 클릭하면 대화 상자가 닫히고 DatabaseHelper 파일의 "deletefromDB"메소드가 데이터베이스의 테이블에서 레코드 행을 삭제하도록 설정됩니다. 이 메서드는 CARDNUM 열과 해당 cardnum 정수 값을 사용하여 레코드 행의 데이터를 삭제합니다. 대화 상자가 예상대로 닫히지 만 안타깝게도 응용 프로그램을 실행 한 후 데이터베이스를 확인한 후에 SQLite 데이터베이스에서 변경된 사항이 없습니다. SQLite에 DB Browser를 사용하여 전후로 데이터베이스를 확인합니다. 내가 여기서 무엇을 놓치고 있니?Android : SQLIte 데이터베이스의 레코드 행을 조각에서 삭제
DeleteCardViewFragment.java
public class DeleteCardViewFragment extends DialogFragment {
DatabaseHelper dbHelper;
private int cardnum = 0;
public DeleteCardViewFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
dbHelper = new DatabaseHelper(getActivity());
final View rootView = inflater.inflate(R.layout.delcardview_layout, container, false);
getDialog().setTitle("Delete skycard");
...
Button btnOK = (Button) rootView.findViewById(R.id.btnOK);
btnOK.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
**dbHelper.deletefromDB(cardnum);**
dismiss();
}
});
return rootView;
}
}
DBContract.java 데이터베이스 테이블 이름의 파일과 열
public final class DBContract {
public DBContract() {}
public static abstract class DBEntry implements BaseColumns {
public static final String TABLE_NAME_USERINPUTS = "userinputs";
public static final String COLUMN_NAME_ID = "_id";
public static final String COLUMN_NAME_CARDNUM = "cardnum";
public static final String COLUMN_NAME_TODO = "todo";
public static final String COLUMN_NAME_NOTE1 = "note1";
public static final String COLUMN_NAME_NOTE2 = "note2";
public static final String COLUMN_NAME_DUEDATE = "duedate";
public static final String COLUMN_NAME_DUETIME = "duetime";
public static final String COLUMN_NAME_TIMESTAMP = "timestamp";
}
}
DatabaseHelper.java
public class DatabaseHelper extends SQLiteOpenHelper {
...
private static final String SQL_CREATE_ENTRIES =
"CREATE TABLE IF NOT EXISTS "+ DBContract.DBEntry.TABLE_NAME_USERINPUTS +
"(" + DBContract.DBEntry.COLUMN_NAME_ID +
" INTEGER PRIMARY KEY, " +
DBContract.DBEntry.COLUMN_NAME_CARDNUM +
" INTEGER," +
DBContract.DBEntry.COLUMN_NAME_TODO +
" TEXT," +
DBContract.DBEntry.COLUMN_NAME_NOTE1 +
" TEXT," +
DBContract.DBEntry.COLUMN_NAME_NOTE2 +
" TEXT," +
DBContract.DBEntry.COLUMN_NAME_DUEDATE +
" TEXT," +
DBContract.DBEntry.COLUMN_NAME_DUETIME +
" TEXT," +
DBContract.DBEntry.COLUMN_NAME_TIMESTAMP +
" INTEGER)";
**public void deletefromDB(int cardnum)** {
SQLiteDatabase db = this.getWritableDatabase();
// Delete the CardView's data row using the integer from cardum.
db.delete(DBContract.DBEntry.TABLE_NAME_USERINPUTS,
DBContract.DBEntry.COLUMN_NAME_CARDNUM + "= ?", new String[]{String.valueOf(cardnum)});
db.close();
}
}
http://stackoverflow.com/questions/7510219/deleting-row-in-sqlite-in-에 추가 android –
나는 그것을 시도 할 것이다. – AJW
데이터 행이 아직 없습니다. – AJW