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

업데이트 하면 DB가 예전 것으로 나와요......

0 추천
업데이트 하면 DB가 예전 것으로 나와요......

DB를 수정하고 apk를 생성하여 앱을 업데이트 하면 업데이트 전 DB가 그대로 있어요.........

어플 관리에서 자료 삭제를 하면 수정한 자료로 그때서야 바뀌네요......

고수님들 업데이트 하면 바로 적용될수 있도록 도와 주세요....

DatabaseHelper.java 내용입니다.

package Phone;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import android.content.Context;
import android.content.res.AssetManager;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.widget.Toast;

public class DatabaseHelper extends SQLiteOpenHelper
{
 public static final String ROOT_DIR = "/data/data/Phone/databases/";
 private static final String DATABASE_NAME = "appdb.sqlite";
 private static final int SCHEMA_VERSION = 2;

 public DatabaseHelper(Context context)
 {
  super(context, DATABASE_NAME, null, SCHEMA_VERSION);  
  setDB(context);
 }
 @Override
 public void onCreate(SQLiteDatabase db) {

 }

 @Override
 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  
 }

 public static void setDB(Context ctx) {
  File folder = new File(ROOT_DIR);
  if(folder.exists()) {
  } else {
   folder.mkdirs();
  }
  AssetManager assetManager = ctx.getResources().getAssets();
  File outfile = new File(ROOT_DIR+"appdb.sqlite");   
  InputStream is = null;  
  FileOutputStream fo = null;
  long filesize = 0;    
  try {
   is = assetManager.open("appdb.sqlite", AssetManager.ACCESS_BUFFER);
   filesize = is.available();
   if (outfile.length() <= 0) {
    byte[] tempdata = new byte[(int) filesize];
    is.read(tempdata);
    is.close();
    outfile.createNewFile();
    fo = new FileOutputStream(outfile);
    fo.write(tempdata);
    fo.close();   
   } else {}
  } catch (IOException e) {}  
 }

 public ArrayList<HashMap<String,String>> getAllSawons()
 {
  ArrayList<HashMap<String,String>> sawonList = new ArrayList<HashMap<String,String>>();
  String selectQuery = "select * from User order by name" ;
  SQLiteDatabase db = this.getReadableDatabase();
  Cursor cursor = db.rawQuery(selectQuery, null);

  if (cursor.moveToFirst()) {

   do {

    HashMap<String, String> sawon = new HashMap<String, String>();

    String tel = ("031-");

    sawon.put("name", cursor.getString(2));
    sawon.put("nameChosung", cursor.getString(3));
    sawon.put("nameJa", cursor.getString(4));
    sawon.put("tel", tel+cursor.getString(6));
    sawon.put("buser", cursor.getString(8));
    sawon.put("damdang", cursor.getString(7));
    sawon.put("image_path", cursor.getString(11));
    sawon.put("memo", cursor.getString(12));
    sawon.put("phone", cursor.getString(9));
    sawon.put("mail", cursor.getString(5));

    sawonList.add(sawon);
   } while (cursor.moveToNext());            
  }
  db.close();
  cursor.close();
  return sawonList;
 }

 public ArrayList<HashMap<String,String>> AllBusers()
 {
  ArrayList<HashMap<String,String>> buserList = new ArrayList<HashMap<String,String>>();
  String selectQuery = "select * from Buser order by _id" ;
  SQLiteDatabase db = this.getReadableDatabase();
  Cursor bcursor = db.rawQuery(selectQuery, null);

  if (bcursor.moveToFirst()) {

   do {

    HashMap<String, String> buser = new HashMap<String, String>();

    buser.put("Bbuser", bcursor.getString(1));
    buser.put("Bdamdang", bcursor.getString(2));
    buser.put("Btel", bcursor.getString(3));
    buser.put("BbuserChosung", bcursor.getString(4));
    buser.put("BdamdangChosung", bcursor.getString(5));

    buserList.add(buser);
   } while (bcursor.moveToNext());            
  }   
  db.close();
  bcursor.close();
  return buserList;
 }
 
 /**
  * 부서 목록 추출
  * @return
  */
 public ArrayList<String> AllBuserNmList() {
  ArrayList<String> buserNmList = new ArrayList<String>();

  String selectQuery = "SELECT DISTINCT Bbuser FROM buser ORDER BY _id ASC";
  SQLiteDatabase db = this.getReadableDatabase();
  Cursor cursor = db.rawQuery(selectQuery, null);
  if(cursor.moveToFirst()) {
   do {
    buserNmList.add(cursor.getString(0));
   } while(cursor.moveToNext());
  }

  db.close();
  cursor.close();
  
  return buserNmList;
 }

 /**
  * 부서이름이 같은 부서 목록 추출
  * @param buserNm 부서이름
  * @return
  */
 public ArrayList<HashMap<String,String>> getBuserList(String buserNm)
 {
  ArrayList<HashMap<String,String>> buserList = new ArrayList<HashMap<String,String>>();
  String selectQuery = "SELECT * FROM Buser WHERE Bbuser LIKE '" + buserNm + "' ORDER BY _id" ;
  SQLiteDatabase db = this.getReadableDatabase();
  Cursor bcursor = db.rawQuery(selectQuery, null);

  if (bcursor.moveToFirst()) {

   do {
    HashMap<String, String> buser = new HashMap<String, String>();

    buser.put("Bbuser", bcursor.getString(1));
    buser.put("Bdamdang", bcursor.getString(2));
    buser.put("Btel", bcursor.getString(3));
    buser.put("BbuserChosung", bcursor.getString(4));
    buser.put("BdamdangChosung", bcursor.getString(5));

    buserList.add(buser);
   } while (bcursor.moveToNext());            
  }   
  db.close();
  bcursor.close();
  return buserList;
 }

 public ArrayList<HashMap<String,String>> getBDUserNmList(String buser, String damdang) {
  ArrayList<HashMap<String,String>> bdUserNmList = new ArrayList<HashMap<String,String>>();

  String selectQuery = "SELECT * FROM User WHERE buser LIKE '"+buser+"' AND damdang LIKE '"+damdang+"' ORDER BY _id";
  SQLiteDatabase db = this.getReadableDatabase();
  Cursor cursor = db.rawQuery(selectQuery, null);

  if (cursor.moveToFirst()) {

   do {

    HashMap<String, String> sawon = new HashMap<String, String>();

    String tel = ("031-");

    sawon.put("name", cursor.getString(2));
    sawon.put("nameChosung", cursor.getString(3));
    sawon.put("nameJa", cursor.getString(4));
    sawon.put("tel", tel+cursor.getString(6));
    sawon.put("buser", cursor.getString(8));
    sawon.put("damdang", cursor.getString(7));
    sawon.put("image_path", cursor.getString(11));
    sawon.put("memo", cursor.getString(12));
    sawon.put("phone", cursor.getString(9));
    sawon.put("mail", cursor.getString(5));

    bdUserNmList.add(sawon);
   } while (cursor.moveToNext());            
  }

  db.close();
  cursor.close();
  
  return bdUserNmList;
 }
 
 public HashMap<String,String> getUserInfo(String buser, String damdang, String name) {
  HashMap<String,String> userInfo = new HashMap<String, String>();

  String selectQuery = "SELECT * FROM User WHERE buser LIKE '"+buser+"' AND damdang LIKE '"+damdang+"' AND name LIKE'"+name+"'";
  SQLiteDatabase db = this.getReadableDatabase();
  Cursor cursor = db.rawQuery(selectQuery, null);
  
  if (cursor.moveToFirst()) {
   String tel = ("031-");

   userInfo.put("name", cursor.getString(2));
   userInfo.put("nameChosung", cursor.getString(3));
   userInfo.put("nameJa", cursor.getString(4));
   userInfo.put("mail", cursor.getString(5));
   userInfo.put("tel", tel+cursor.getString(6));
   userInfo.put("damdang", cursor.getString(7));
   userInfo.put("buser", cursor.getString(8));
   userInfo.put("phone", cursor.getString(9));
   userInfo.put("image_path", cursor.getString(11));
   userInfo.put("memo", cursor.getString(12));
  }

  db.close();
  cursor.close();
  
  return userInfo;
 }

 // 사원 DB에 검색하려는 전화번호의 존재 유무 확인
 public boolean isExistPhoneNum(String pn) {
  String selectQuery = "SELECT * FROM User WHERE replace(phone,'-','') LIKE '" + pn +"'";
  SQLiteDatabase db = this.getReadableDatabase();
  Cursor cursor = db.rawQuery(selectQuery, null);

  boolean isEPN = (cursor.getCount() < 1) ? false : true;

  db.close();
  cursor.close();

  return isEPN;
 }
}
물안개 (120 포인트) 님이 2013년 6월 3일 질문

2개의 답변

0 추천
앱 업데이트시 디비는 삭제되지 않죠, onUpgrade에서 버전이 바꼈을 시 테이블을 삭제하고 다시 만들어보세요
안티푸라면 (6,700 포인트) 님이 2013년 6월 3일 답변
답변 감사합니다.
흑흑흑  저는 완전 초보라 테이블 삭제 문장좀 알려 주세요.....
select 쿼리문을 사용할 줄 알면서 테이블 삭제를 못하신다구요? 이상하군요. 구글에 검색하시면 금방 나올겁니다. sqlite도 sql 문장 크게 벗어나는것 없는것으로 알고 있습니다.
감사 합니다.
drop table 했는데 안되더라고요......
db.execSQL("DROP TABLE " + DATABASE_NAME);
그럼 rawQuery 말고 execSQL로 해보세요
감사 합니다.
아래와 같이 했는데 잘않되네요....
@Override
    public void onCreate(SQLiteDatabase db) {

    }

    //연습
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){

        db.execSQL("DROP TABLE IF EXISTS db");

        onCreate(db);

        } //연습
    //@Override
    //public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
       
    //}
//연습
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){

        db.execSQL("DROP TABLE IF EXISTS " + db); //db 테이블 이름을 해주셔야 지워집니다

        onCreate(db);

        } //연습
    //@Override
    //public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        
    //}
0 추천

onCreate : 생성<처음 어플이 깔리거나 사용자가 프로그램 관리자에서 데이타 삭제후 돌아감>

onUpgrade : 업그레이드<설치된 디비가 있다면 버젼을 비교하여 현제 버젼이 더 높을때 돌아감> 

테이블 값들이 초기화 되어도 상관없다면

onUpgrade(...){

  ...DROP TABLE IF EXISTS your_table_name  <생성하셨던 테이블 이름>...

  onCreate(...);

}

테이블 값들중 유지 시켜야 할 것들이 있다면

onUpgrade(...){

  temp 테이블 생성.

  temp 테이블에 기존 table 중 유지해야 할 값들 insert <데이터 이동>

  기존 테이블 삭제

  temp 테이블 이름을 기존 테이블로 변경

}

절대로 이렇게 해야 하는 것은 아니지만 이런 형식을 추천드립니다.

인터넷 좀 뒤져보면 구문까지 디테일하게 나오니깐 찾아보세요.

좋은하루 되세요~!!

익명사용자 님이 2013년 6월 4일 답변
감사 합니다.
흑흑흑......
아직 해결 못했어요//////////
잘 안되네요.....
혹시 기존설치 자료를 삭제하고 apk에 포함된 자료로 대체 하는 방법은 없는지 궁금 합니다.....
...