SQLite를 이용해서 처음에 테이블을 생성하고, 그리고 값 초기화 할 때, 테이블값을 초기화 하기 보다는 테이블을 삭제해버리는게 좋을거 같아서 drop table if exists table_name; 이런식으로 쿼리를 입력하였는데 자꾸 에러가 나네요..
아무리 구글링을해봐도 답이 안나옵니다. 도와주세요 ㅠㅠ
database관련 class입니다.
여기서 dropTable()이 테이블을 삭제하는 메소드입니다.
public class DataBaseAdapter {
// table에 들어갈 속성값
....
// DataBaseHelper와 SQLDatabase객체 정의(SQLiteDatabase : 추가, 삭제, 쿼리, 수정과 관련)
private DataBaseHelper mDBHelper;
private SQLiteDatabase mDB;
// Create Table 정의
private static final String DB_CREATE = "create table userinfo (id integer primary key autoincrement,"
+ "name text not null, sex text, year Integer, height Integer, weight Integer, loss_weight Integer, avg_weight Integer, bm Integer, bmi Integer);";
// SQLiteOpenHelper Values
private static final String DATABASE_NAME = "checkmybody.db";
private static final String DATABASE_TABLE = "userinfo";
private static final int DATABASE_VERSION = 1;
private final Context mContext;
// SQLiteOpenHelper 정의(SQLiteOpenHelper : 생성, 열기, 업데이트와 관련)
private class DataBaseHelper extends SQLiteOpenHelper {
public DataBaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
// table 생성
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(DB_CREATE);
}
// db업데이트
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE);
onCreate(db);
}
}
public DataBaseAdapter(Context context) {
mContext = context;
}
// DB열기
public DataBaseAdapter open() throws SQLException {
mDBHelper = new DataBaseHelper(mContext);
mDB = mDBHelper.getWritableDatabase();
return this;
}
// DB 닫기
public void close() {
mDBHelper.close();
}
// 테이블 삭제
public void dropTable() {
mDB.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE+";");
}
// 필드값 insert
public long insertUserInfo(String name, String sex, float year,
float height, float weight, float lossWeihgt, float avgWeight,
float BM, float BMI) {
ContentValues initialValues = new ContentValues();
initialValues.put(KEY_NAME, name);
initialValues.put(KEY_SEX, sex);
initialValues.put(KEY_YEAR, year);
initialValues.put(KEY_HEIGHT, height);
initialValues.put(KEY_WEIHGT, weight);
initialValues.put(KEY_LOSS_WEIGHT, lossWeihgt);
initialValues.put(KEY_AVG_WEIGHT, avgWeight);
initialValues.put(KEY_BM, BM);
initialValues.put(KEY_BMI, BMI);
return mDB.insert(DATABASE_TABLE, null, initialValues);
}
...
}
dropTable을 실행시키는 class입니다.
public class SettingFragment extends PreferenceFragment {
private ValueManager vm = ValueManager.getInstance();
private DataBaseAdapter mDBAdapter = new DataBaseAdapter(getActivity());
private Preference init;
// default
private static final String SECTION_NUMBER = "section number";
public static SettingFragment newInstance(int sectionNumber) {
SettingFragment fragment = new SettingFragment();
Bundle args = new Bundle();
args.putInt(SECTION_NUMBER, sectionNumber);
fragment.setArguments(args);
return fragment;
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
((MainActivity) activity).onSectionAttached(getArguments().getInt(SECTION_NUMBER));
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.fragment_setting);
init = (Preference) findPreference("setting_init");
init.setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
mDBAdapter.dropTable();
vm.ui_editor.clear();
vm.ui_editor.commit();
Intent intent = new Intent(getActivity(), StartActivity.class);
getActivity().finish();
startActivity(intent);
return false;
}
});
}
}
두 클래스는 따로 만들었습니다.
이것은 에러났을때의 log입니다.
08-11 01:21:19.348: E/AndroidRuntime(14395): FATAL EXCEPTION: main
08-11 01:21:19.348: E/AndroidRuntime(14395): Process: com.example.checkmybody, PID: 14395
08-11 01:21:19.348: E/AndroidRuntime(14395): java.lang.NullPointerException
08-11 01:21:19.348: E/AndroidRuntime(14395): at lee.sh.checkmybody.common.DataBaseAdapter.dropTable(DataBaseAdapter.java:77)
08-11 01:21:19.348: E/AndroidRuntime(14395): at com.example.checkmybody.SettingFragment$1.onPreferenceClick(SettingFragment.java:46)
08-11 01:21:19.348: E/AndroidRuntime(14395): at android.preference.Preference.performClick(Preference.java:954)
08-11 01:21:19.348: E/AndroidRuntime(14395): at android.preference.PreferenceScreen.onItemClick(PreferenceScreen.java:250)
08-11 01:21:19.348: E/AndroidRuntime(14395): at android.widget.AdapterView.performItemClick(AdapterView.java:299)
08-11 01:21:19.348: E/AndroidRuntime(14395): at android.widget.AbsListView.performItemClick(AbsListView.java:1150)
08-11 01:21:19.348: E/AndroidRuntime(14395): at android.widget.AbsListView$PerformClick.run(AbsListView.java:2960)
08-11 01:21:19.348: E/AndroidRuntime(14395): at android.widget.AbsListView$3.run(AbsListView.java:3708)
08-11 01:21:19.348: E/AndroidRuntime(14395): at android.os.Handler.handleCallback(Handler.java:733)
08-11 01:21:19.348: E/AndroidRuntime(14395): at android.os.Handler.dispatchMessage(Handler.java:95)
08-11 01:21:19.348: E/AndroidRuntime(14395): at android.os.Looper.loop(Looper.java:136)
08-11 01:21:19.348: E/AndroidRuntime(14395): at android.app.ActivityThread.main(ActivityThread.java:5068)
08-11 01:21:19.348: E/AndroidRuntime(14395): at java.lang.reflect.Method.invokeNative(Native Method)
08-11 01:21:19.348: E/AndroidRuntime(14395): at java.lang.reflect.Method.invoke(Method.java:515)
08-11 01:21:19.348: E/AndroidRuntime(14395): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
08-11 01:21:19.348: E/AndroidRuntime(14395): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608)
08-11 01:21:19.348: E/AndroidRuntime(14395): at dalvik.system.NativeStart.main(Native Method)