所以我在Android中使用SQLite有点麻烦。我按照指南创建了一个表,并编写了一个插入数据的工作方法。在我有很多数据后,我想再删除它,所以我写了一个方法,放弃了我的表。 现在我遇到的问题是它不再创建表了。如果我想插入数据,它说“没有这样的表”。我真的不知道它为什么不再创建它。相关代码:
public class MeFragment extends Fragment实现了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;
}
}
public void removeAllData(){
SQLiteDatabase db = this.getWritableDatabase();
db.execSQL("DROP TABLE "+TABLE_NAME);
}
非常感谢任何帮助
答案 0 :(得分:0)
您可以将removeAllData方法添加到dbhelper中,以便我们可以看到您在做什么吗?
另外,您没有做任何事情来管理db版本号。如果您在进行更改后仍然经常使用相同的版本号,那么这可能是您遇到问题的潜在原因。
此外,您应该避免直接调用任何生命周期方法(例如onUpgrade方法中的onCreate)。如果您想要从多个生命周期方法调用代码,请将其分解为自己的方法,这样您就不会冒着在当前问题之上引入生命周期问题的风险。