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

SQLite delete 질문 드립니다.

0 추천

안녕하세요

sqlite 로 디비 연동해서 하고있는데요 연동은 이클립스 assets 폴더에 만들어진 db파일 넣어서 폰으로 복사해서 사용하고 있습니다.

 

여기서 delete를 해야되는데 리스트뷰 에있는 목록을 삭제합니다.

선택된 리스트뷰의 rowid로 삭제를 하는데 삭제가 안되네요.

 

MainView.getInstance().headerRightBtn.setOnClickListener(new OnClickListener() {
				
				@Override
				public void onClick(View v) {
					String str = m_msgcontent.toString();
					System.out.println(str);
					if(MainView.getInstance().headerRightBtn.getText()=="삭 제"){
						AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
				                context);
						
						   // 제목셋팅
				        alertDialogBuilder.setTitle("삭 제");
				         
				        // AlertDialog 셋팅
				        alertDialogBuilder
				                .setMessage("선택하신 메시지를 삭제 하시겠습니가?")
				                .setCancelable(false)
				                .setPositiveButton("네",
				                        new DialogInterface.OnClickListener() {
				                            public void onClick(
				                                    DialogInterface dialog, int id) {
				                            	
				                            	//DB 연동 // 
				                            	
				                            	
				                            	DBManager mys = new DBManager(context,PACKAGE_DIR+"/"+DATABASE_NAME,null,1);

												SQLiteDatabase dbs = mys.getWritableDatabase();
												String str = Shared.getSharedPreference(context, "rowids");
												System.out
														.println(str);
							    /* String sql = "delete from message where rowid ="+ str;
							     System.out.println(sql);
								db.execSQL(sql);*/
												dbs.delete("message", "rowid="+str, null);
								m_adapters.notifyDataSetChanged();
								m_isVisible=false;
								
								MainView.getInstance().headerRightBtn.setText("편 집");	
								dbs.close();
								mys.close();
								
				                            	

				                            	
				                            	
											
				                            	
				                            }

				                        })
						

이부분이 삭제 버튼 눌렀을 경우 다이얼로그가 뜨면서 네 버튼을 누르면 db연동해서 delete를 하는 부분입니다.

그런데 리스트뷰에는 삭제가 되는데 다시 어플 껏다가 키면 그대로 원상복구 되어있네요.

DBManeger라는 클래스를 만들었습니다.

 

package com.m.italk.util;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class DBManager extends SQLiteOpenHelper{

	 public DBManager(final Context m_context, String name, CursorFactory factory,
			int version) {
		super(m_context, name, factory, version);
	
		// TODO Auto-generated constructor stub
	}

	 

		@Override
		public void onCreate(SQLiteDatabase db) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
			// TODO Auto-generated method stub
			
		}
}

어떤게 문제일까요?

엣센스 (300 포인트) 님이 2016년 1월 26일 질문
delete 말고 select 나 insert는 정상 작동 하나요..?

2개의 답변

0 추천
Manager를 만들어서 사용하는건 아주 좋은데요,

디비를 사용한 작업들은 그 매니저안에서 메소드를 생성하고

실제 사용하는 액티비티에서는 미리 매니저를 받아와서 디비를 사용할 준비를 해놓고

액션이 일어날때 해당 매니저의 메소드를 바로 호출해서 사용하는 방법이 좋을듯 합니다.

제가 한것은 아니지만 제가 말한것과 비슷한 글의 링크 걸어 드립니다.

http://here4you.tistory.com/50
캬옹이 (37,920 포인트) 님이 2016년 1월 27일 답변
링크 걸어준데서
public void removeData(int index) {
        String sql = "delete from " + tableName + " where id = " + index + ";";
        db.execSQL(sql);
    }
이부분도 매니저 부분에 넣어서
액티비티에서 저거 호출해서 값넣어서 해봣는데도 안되네요 ㅠ
0 추천

assets 폴더말고 databases 폴더에 db 파일을 복사해서 사용해 보세요.

참고자료

http://stackoverflow.com/questions/4452538/android-location-of-sqlite-database-on-the-device

http://developer.android.com/intl/ko/reference/android/database/sqlite/SQLiteOpenHelper.html#SQLiteOpenHelper(android.content.Context, java.lang.String, android.database.sqlite.SQLiteDatabase.CursorFactory, int)

Anno (290 포인트) 님이 2016년 1월 27일 답변
...