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.

→ Ссылка