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

안드로이드 sqlite DB문제 해결좀...부탁드립니다.-초보-

0 추천
DB라는게 어플을 껏다켜도 저장되있어야하는거 아닌가요..

어플키고 잘되다가 어플껏다키면 저장된 정보다 다사라집니다..이유좀..

두개의 DB 엑티비티 소스입니다.....

package com.example.jiminjimin;

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.TextView;
import android.widget.Toast;

public class Edit extends Activity {
 ImageButton okbtn1;
 EditText number1;
 DBHelper db;
 SQLiteDatabase sqldb;
 Button btn1;
 TextView test1;
 String number2;
 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.custom);
     db = new DBHelper(getApplicationContext());
     okbtn1 = (ImageButton)findViewById(R.id.okbtn);
     number1 = (EditText)findViewById(R.id.folderName);
     btn1 = (Button)findViewById(R.id.button1);
     test1 = (TextView)findViewById(R.id.textView1);
    
     // TODO Auto-generated method stub
     okbtn1.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View v) {
    String a = "yes";
    String b=null;
    // TODO Auto-generated method stub
    sqldb = db.getWritableDatabase();
    db.onUpgrade(sqldb, 1, 2);
    sqldb.execSQL("INSERT INTO CallDB VALUES("
      +number1.getText().toString()+");");
    
    Toast.makeText(getApplicationContext(),a , Toast.LENGTH_SHORT).show();
    finish();
    Cursor cursor = sqldb.rawQuery("SELECT * FROM CallDB;",null);
    while(cursor.moveToNext()){
     b += cursor.getString(0);
    }
    cursor.close();
    sqldb.close();
    Intent intent = new Intent(getApplicationContext(),MainActivity.class);
    intent.putExtra("number", b);
    startActivityForResult(intent,0);
   }
  });

 }

}

-------------------------------------------------------------------------------------------

package com.example.jiminjimin;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;

public class DBHelper extends SQLiteOpenHelper {
  public DBHelper(Context context) {
   super(context, "CallDB", null, 1);
   // TODO Auto-generated constructor stub
  }
  @Override
  public void onCreate(SQLiteDatabase db) {
   db.execSQL("CREATE TABLE CallDB(NUMBER CHAR(30) PRIMARY KEY);");
  }
  @Override
  public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) {
   db.execSQL("DROP TABLE IF EXISTS CallDB");
   onCreate(db);
  }

 }
지미니v (1,080 포인트) 님이 2013년 12월 4일 질문

1개의 답변

0 추천

db.onUpgrade(sqldb, 1, 2); 이것때문에

버튼을 누를때마다 DBHelper 클래스의 onUpgrade가 호출되어 CallDB테이블을 지우고 새로 생성하고있어서 데이터가 유지가 안된것입니다.

특별한 경우가 아닌경우에는 onUpgrade를 명시적으로 호출을 안하시는 편이 좋습니다.

테이블의 삭제나 변경이 필요한경우 super(context, "CallDB", null, 1); 이부분의 버전만 바꿔주시고 

재설치하시면 onUpgrade가 자동으로 호출되어 DB를 초기화할수있습니다.

 

예를 들면 DB vesion이 1인 어플을 사용하다가

테이블이 더추가되어야 하는상황이 발생하여 version을 2로 올리고 

재설치하여 어플을 실행하면 db = new DBHelper(getApplicationContext());

이렇게 DBHelper객체를 생성할때 기존에 사용하던 버전과 현재 버전을 비교하여 다르다면

onUpgrade 가 자동으로 호출되어 DB를 초기화 하게 됩니다.

 

 

얼룩돼지 (15,720 포인트) 님이 2013년 12월 4일 답변
...