마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 DB sqlite 질문이요~

0 추천

리스트를 만들고 있는데

길게 눌러서 제거를 하게 되면 저장되어 다시 껐다 키면 안나와야 하잖아요?

그런데 지웠던게 계속 나옵니다.

어떻게 된건지 좀 알려주세여

 

private OnItemLongClickListener longClickListener = new OnItemLongClickListener() {
    @Override
    public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                                   int position, long arg3) {

        DLog.e(TAG, "position = " + position);

        boolean result = mDbOpenHelper.deleteColumn(position + 1);
        DLog.e(TAG, "result = " + result);

        mInfoArray.remove(position);
        mAdapter.setArrayList(mInfoArray);
        mAdapter.notifyDataSetChanged();

        return false;
    }
};
익명사용자 님이 2016년 10월 28일 질문
소스에서  deleteColumn의 파라미터가 잘려서 안보여서 정확히 어떤 메소드가 호출되고 있는지 모르겠지만 지금 그 메소드로 넘겨주시는 값은 id도 아니고 contact number도 아닌 것으로 보여요. 그리고 deleteColn의 조건문도 체크하셔야 할 듯.
"contact='"+number +"'"
그럼 어떻게 해야하나요??
제가 DB랑은 지금 처음 접해봐서요 이것도 오픈소스 참고해서 만들었거든요
어디를 어떻게 고쳐야 할 지 좀 가르쳐주시면 안될까요??
제 생각에는 delectColumn() 메소드에 넘겨 줄 id는  adapter에서 가져와야 할 것 같은데요.
mInfoArray가 어떤 클래스를 아이템으로 갖는지 몰라서 더 알려드리기가 곤란하지만  ItemObject item = mInfoArray.get(position);
int id = item.getId();
처럼 position에 해당하는 객체에서 id값을 가져와서 쿼리를 하셔야 합니다.
이건 db문제라기 보다는 java의 클래스 설계와 collection을 어떻게 사용하는지와 관련이 더 깊어 보이네요.

1개의 답변

0 추천
db쪽 코드를 봐야 알 것 같네요
익명사용자 님이 2016년 10월 28일 답변
public final class DataBases {

    public static final class CreateDB implements BaseColumns{
        public static final String NAME = "name";
        public static final String CONTACT = "contact";
        public static final String EMAIL = "email";
        public static final String _TABLENAME = "address";
        public static final String _CREATE =
                "create table "+_TABLENAME+"("
                        +_ID+" integer primary key autoincrement, "
                        +NAME+" text not null , "
                        +CONTACT+" text not null , "
                        +EMAIL+" text not null );";
    }
}


public class DbOpenHelper {

    private static final String DATABASE_NAME = "addressbook.db";
    private static final int DATABASE_VERSION = 1;
    public static SQLiteDatabase mDB;
    private DatabaseHelper mDBHelper;
    private Context mCtx;

    private class DatabaseHelper extends SQLiteOpenHelper{

        // �앹꽦��
        public DatabaseHelper(Context context, String name,
                              CursorFactory factory, int version) {
            super(context, name, factory, version);
        }

        // 理쒖큹 DB瑜� 留뚮뱾�� �쒕쾲留� �몄텧�쒕떎.
        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL(DataBases.CreateDB._CREATE);

        }

        // 踰꾩쟾�� �낅뜲�댄듃 �섏뿀�� 寃쎌슦 DB瑜� �ㅼ떆 留뚮뱾�� 以���.
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            db.execSQL("DROP TABLE IF EXISTS "+DataBases.CreateDB._TABLENAME);
            onCreate(db);
        }
    }

    public DbOpenHelper(Context context){
        this.mCtx = context;
    }

    public DbOpenHelper open() throws SQLException{
        mDBHelper = new DatabaseHelper(mCtx, DATABASE_NAME, null, DATABASE_VERSION);
        mDB = mDBHelper.getWritableDatabase();
        return this;
    }

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

    // Insert DB
    public long insertColumn(String name, String contact, String email){
        ContentValues values = new ContentValues();
        values.put(DataBases.CreateDB.NAME, name);
        values.put(DataBases.CreateDB.CONTACT, contact);
        values.put(DataBases.CreateDB.EMAIL, email);
        return mDB.insert(DataBases.CreateDB._TABLENAME, null, values);
    }

    // Update DB
    public boolean updateColumn(long id , String name, String contact, String email){
        ContentValues values = new ContentValues();
        values.put(DataBases.CreateDB.NAME, name);
        values.put(DataBases.CreateDB.CONTACT, contact);
        values.put(DataBases.CreateDB.EMAIL, email);
        return mDB.update(DataBases.CreateDB._TABLENAME, values, "_id="+id, null) > 0;
    }

    // Delete ID
    public boolean deleteColumn(long id){
        return mDB.delete(DataBases.CreateDB._TABLENAME, "_id="+id, null) > 0;
    }

    // Delete Contact
    public boolean deleteColumn(String number){
        return mDB.delete(DataBases.CreateDB._TABLENAME, "contact="+number, null) > 0;
    }

    // Select All
    public Cursor getAllColumns(){
        return mDB.query(DataBases.CreateDB._TABLENAME, null, null, null, null, null, null);
    }

    // ID 而щ읆 �살뼱 �ㅺ린
    public Cursor getColumn(long id){
        Cursor c = mDB.query(DataBases.CreateDB._TABLENAME, null,
                "_id="+id, null, null, null, null);
        if(c != null && c.getCount() != 0)
            c.moveToFirst();
        return c;
    }

    // �대쫫 寃��� �섍린 (rawQuery)
    public Cursor getMatchName(String name){
        Cursor c = mDB.rawQuery( "select * from address where name=" + "'" + name + "'" , null);
        return c;
    }


}




public final class DLog {
    private static boolean DEBUG = true;

    public static int v(String tag, String msg) {
        if (DEBUG == false) {
            return 0;
        }
        return Log.v(tag, msg);
    }

    public static int v(String tag, String msg, Throwable tr) {
        if (DEBUG == false) {
            return 0;
        }
        return Log.v(tag, msg, tr);
    }

    public static int e(String tag, String msg) {
        if (DEBUG == false) {
            return 0;
        }
        return Log.e(tag, msg);
    }

    public static int e(String tag, String msg, Throwable tr) {
        if (DEBUG == false) {
            return 0;
        }
        return Log.e(tag, msg, tr);
    }

    public static int w(String tag, String msg) {
        if (DEBUG == false) {
            return 0;
        }
        return Log.w(tag, msg);
    }

    public static int w(String tag, String msg, Throwable tr) {
        if (DEBUG == false) {
            return 0;
        }
        return Log.w(tag, msg, tr);
    }

    public static int i(String tag, String msg) {
        if (DEBUG == false) {
            return 0;
        }
        return Log.i(tag, msg);
    }

    public static int i(String tag, String msg, Throwable tr) {
        if (DEBUG == false) {
            return 0;
        }
        return Log.i(tag, msg, tr);
    }

    public static int d(String tag, String msg) {
        if (DEBUG == false) {
            return 0;
        }
        return Log.d(tag, msg);
    }

    public static int d(String tag, String msg, Throwable tr) {
        if (DEBUG == false) {
            return 0;
        }
        return Log.d(tag, msg, tr);
    }

}

이상입니다.
...