No such table SQLite, Android
Возникла такая ошибка: android.database.sqlite.SQLiteException: no such table: dates (Sqlite code 1 SQLITE_ERROR): , while compiling: SELECT * FROM dates, (OS error - 2:No such file or directory), хотя таблицу я создаю (кажется). Код Fragment:
public class GalleryFragment extends Fragment {
private GalleryViewModel galleryViewModel;
private FragmentGalleryBinding binding;
private SQLiteDatabase sql;
private DBManage db;
private Cursor cr;
private ArrayList<Elem> arr;
private RecyclerView rv_dates;
TextView error;
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
galleryViewModel =
new ViewModelProvider(this).get(GalleryViewModel.class);
binding = FragmentGalleryBinding.inflate(inflater, container, false);
View root = binding.getRoot();
rv_dates = root.findViewById(R.id.rv_dates);
LinearLayoutManager llm = new LinearLayoutManager(getContext());
rv_dates.setLayoutManager(llm);
ImageButton add = root.findViewById(R.id.ib_add);
add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(getContext(), AddDate.class);
startActivity(i);
}
});
db = new DBManage(getContext());
sql = db.getReadableDatabase();
cr =sql.query(DBManage.DB_NAME, null,null, null, null, null, null); // ошибка ссылается сюда
error = root.findViewById(R.id.tv_err);
initializeData();
return root;
}
private void initializeData() {
if (DatabaseUtils.queryNumEntries(sql,DBManage.DB_NAME)==0) {
arr = new ArrayList<>();
if (cr.moveToFirst()) {
do {
arr.add(new Elem(
cr.getInt(cr.getColumnIndex("ID")),
cr.getString(cr.getColumnIndex(DBManage.C_NAME)),
cr.getString(cr.getColumnIndex(DBManage.DB_DATE)),
cr.getString(cr.getColumnIndex(DBManage.DB_COLOR)),
cr.getString(cr.getColumnIndex(DBManage.C_PORODA))
));
} while (cr.moveToNext());
cr.close();
initializeAdapter();
}
} else {
rv_dates.setVisibility(View.INVISIBLE);
error.setVisibility(View.VISIBLE);
}
}
private void initializeAdapter(){
RVAdapter adapter = new RVAdapter(arr);
rv_dates.setAdapter(adapter);
}
public void onDestroyView(){
super.onDestroyView();
binding = null;
}
}
DBManage:
public class DBManage extends SQLiteOpenHelper {
public static final String DB_NAME = "dates";
public static String C_NAME = "house";
public static String C_PORODA = "poroda";
public static String C_NOTIF = "notif";
public static String DB_COLOR = "color";
public static String DB_DATE = "date";
public DBManage(Context context) {
super(context, "dates.db", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + "DB_NAME" + " ("
+ "ID" + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ C_NAME + " TEXT NOT NULL, "
+ C_NOTIF + " INTEGER NOT NULL DEFAULT 0 , "
+ DB_COLOR + " TEXT NOT NULL, "
+ DB_DATE + " TEXT NOT NULL,"
+ C_PORODA + " TEXT NOT NULL );");
}
@Override
public void onUpgrade(SQLiteDatabase db, int i, int i1) {
}
}
Подскажите, пожалуйста, в чем проблема. Спасибо!
Ответы (2 шт):
Автор решения: Arty Morris
→ Ссылка
Похоже вы немного неправильно создали базу данных. Вот код создания, который использую я у себя:
public class SQLBase_task extends SQLiteOpenHelper{
public static final int DATABASE_VERSION = 6;
public static final String DATABASE_NAME = "SQLBase_task";
public static final String Task_base = "task_base";
public static final String KEY_ID = "_id";
public static final String KEY_mileage_now = "mileage_now";
public static final String KEY_date_now = "date_now";
public static final String KEY_motoclock_now = "motoclock_now";
public SQLBase_task(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table " + Task_base + "(" + KEY_ID + " integer primary key,"
+ KEY_mileage_now + " integer," + KEY_date_now + " long," + KEY_motoclock_now + " long," + ")");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("drop table if exists " + Task_base);
onCreate(db);
}
}
Автор решения: woesss
→ Ссылка
Очепятка здесь:
db.execSQL("CREATE TABLE " + "DB_NAME" + " ("
Кавычки вокруг DB_NAME лишние - так создаётся таблица с именем DB_NAME, вместо ожидаемой dates.