2016-06-14 17 views
0

因此,我在Android中遇到了一些SQLite問題。我遵循了一個指南,我創建了一個表並編寫了一個插入數據的工作方法。在我有很多數據之後,我想再次刪除它,所以我寫了一個丟掉我的表的方法。 現在我有問題,它不會再創建表。如果我想插入數據,它說「沒有這樣的表」。我不明白爲什麼它不會再創建它。相關代碼:Android:SQLite:一旦下降後就不能創建表格

公共類MeFragment擴展片段實現View.OnClickListener {

private SQLiteDatabase newDB; 
private DatabaseHelper dbHelper; 
private String TABLE_NAME = DatabaseHelper.TABLE_NAME; 


ArrayList<String> myCategoryList = new ArrayList<String>() { 

}; 
ListView lv1; 
ArrayAdapter<String> adapter1; 
EditText editText; 
Button addButton; 


public MeFragment() { 
    // Required empty public constructor 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_me, container, false); 

    dbHelper = new DatabaseHelper(this.getActivity()); 
    preFillCategories(); 
    getCategories(); 

    editText = (EditText) view.findViewById(R.id.addCategory); 
    addButton = (Button) view.findViewById(R.id.addCategoryButton); 
    addButton.setOnClickListener(this); 
    lv1 = (ListView) view.findViewById(R.id.listView1); 
    adapter1 = new ArrayAdapter<String>(this.getActivity(), android.R.layout.simple_list_item_1, myCategoryList); 
    lv1.setAdapter(adapter1); 
    Utility.setDynamicHeight(lv1); 
    //dbHelper.removeAllData(); 

    return view; 
} 

我的數據庫幫助器類:

公共類DatabaseHelper擴展SQLiteOpenHelper {

public static final String DATABASE_NAME = "categories.db"; 
public static final String TABLE_NAME = "categories_table"; 
public static final String COL = "CATEGORYNAME"; 

public DatabaseHelper(Context context) { 
    super(context, DATABASE_NAME, null, 1); 
    SQLiteDatabase db = this.getWritableDatabase(); 

} 

@Override 
public void onCreate(SQLiteDatabase db) { 
    db.execSQL("CREATE TABLE " + TABLE_NAME +" (CATEGORYNAME TEXT PRIMARY KEY)"); 


} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    Log.d("Hallo", "hallo"); 
    db.execSQL("DROP TABLE IF EXISTS "+TABLE_NAME); 
    onCreate(db); 

} 

public boolean insertData(String CATEGORYNAME){ 
    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues contentValues = new ContentValues(); 
    contentValues.put(COL, CATEGORYNAME); 
    long result = db.insert(TABLE_NAME, null, contentValues); 
    if(result == -1){ 
     return false; 
    } 
    else{ 
     return true; 
    } 

} 

公共無效removeAllData (){

SQLiteDatabase db = this.getWritableDatabase(); 
    db.execSQL("DROP TABLE "+TABLE_NAME); 

} 

任何幫助將是非常讚賞

+1

你不要刪除表來清除它,你使用DELETE SQL語句 –

+0

是的,我搞砸後,這是我的想法... –

+1

卸載你的應用程序來重新創建數據庫。 http://stackoverflow.com/questions/21881992/when-is-sqliteopenhelper-oncreate-onupgrade-run – laalto

回答

0

你能在removeAllData方法添加到dbhelper所以我們可以看到你在做什麼?

此外,你沒有做任何事情來管理數據庫版本號。如果即使在進行更改後仍經常使用相同的版本號,這可能會成爲您問題的潛在來源。另外,您應該避免直接調用任何生命週期方法(例如onUpgrade方法中的onCreate)。如果您想要從多個生命週期方法中調用代碼,請將其分解爲自己的方法,這樣您就不會面臨可能在當前問題上引入生命週期問題的風險。

+0

到目前爲止,謝謝你,我添加了方法 –