Rhys Owain Evans Ответов: 1

Как пройти несколькими идентификатор столбца в другую таблицу в способ в Android


У меня возникли трудности с пониманием проблемы с кодом здесь, как описано в logcat. Я полагаю, что это может быть как-то связано с переменной id в методе createPlan, которая должна исходить из идентификатора, созданного автоинкрементом метода createPlanRecipe, но не уверен, как это реализовать. Я не думаю, что с базой данных было что-то не так, я проверил форматирование сто раз, но могу добавить его сюда, если понадобится. Заранее спасибо.
Попробовал использовать insert_last_rowid, но это тоже не работает.
Относительно этой строки курсор c = db.rawQuery("selectlast_insert_rowid()",null);
гр.moveToFirst();
Как получить идентификатор, созданный из db.createPlanRecipe(d_name, dayOfTheWeek, recipe_name); и использовать его в качестве переменной plRecipe в db.execSQL(getInsertPlan(plan_name, plRecipe));

Что я уже пробовал:

public class CreateMealPlan extends MainActivity {

DatePicker datepicker;
Button submit;
List<com.stu54259.plan2cook.Model.Category> listRecipe = new ArrayList<>();
Cursor c;
RecyclerView recipeList;
RecipeListAdapter adapterRecipe;
String recipe_name;
EditText editPlanName;
Integer id;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.create_meal_plan);
    BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
    navigation.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            switch (item.getItemId()) {
                case R.id.home:
                    Intent a = new Intent(CreateMealPlan.this,MainActivity.class);
                    startActivity(a);
                    break;
                case R.id.recipes:
                    Intent b = new Intent(CreateMealPlan.this,RecipeSearch.class);
                    startActivity(b);
                    break;
                /*case R.id.shoppingList:
                    Intent c = new Intent(CreateMealPlan.this, ShoppingList.class);
                    startActivity(c);
                    break;*/
                case R.id.mealPlan:
                    Intent d = new Intent(CreateMealPlan.this, MenuPlan.class);
                    startActivity(d);
                    break;
                /*case R.id.reminder:
                    Intent e = new Intent(CreateMealPlan.this, Reminder.class);
                    startActivity(e);
                    break*/
            }
            return false;
        }
    });
    datepicker = findViewById(R.id.calendarView);
    ListRecipes();
    RecipeListAdapter.OnRecipeClickListener listener = new RecipeListAdapter.OnRecipeClickListener() {
        public void onRecipeClicked(int position, String recName) {
            Log.d("Recipe selected",  recName);
            recipe_name = recName;
        }

    };
    adapterRecipe = new RecipeListAdapter(this, listRecipe, listener);
    recipeList = findViewById(R.id.recipes);
    RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(this,
            LinearLayoutManager.VERTICAL, false);
    recipeList.setLayoutManager(mLayoutManager);
    recipeList.setItemAnimator(new DefaultItemAnimator());
    recipeList.setAdapter(adapterRecipe);

    submit = (Button) findViewById(R.id.create);

    // perform click event on submit button
    submit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            CreatePlan();

        }

        });
}
public void ListRecipes() {
    listRecipe.clear();
    SQLiteDatabase db = (new DatabaseManager(this).getWritableDatabase());
    String selectQuery = " SELECT recipe_name, image, image2, category" + " FROM " + DatabaseManager.TABLE_RECIPE + "  GROUP BY recipe_name";
    c = db.rawQuery(selectQuery, null);
    Log.d("Query", selectQuery);
    if (c.moveToFirst()) {
        do {
            com.stu54259.plan2cook.Model.Category category = new com.stu54259.plan2cook.Model.Category();
            category.setRecipe_name(c.getString(c.getColumnIndex("recipe_name")));
            category.setImage(c.getInt(c.getColumnIndex("image")));
            category.setImage2(c.getString(c.getColumnIndex("image2")));
            category.setCategory_name(c.getString(c.getColumnIndex("category")));
            listRecipe.add(category);
        } while (c.moveToNext());
        c.close();
    }

}
public void CreatePlan(){
    editPlanName = findViewById(R.id.editPlanName);
    String plan_name = editPlanName.getText().toString();
    DatabaseManager db;
    int day = datepicker.getDayOfMonth();
    int month = datepicker.getMonth();
    int year = datepicker.getYear();
    SimpleDateFormat sdf = new SimpleDateFormat("EEEE");
    Integer d_name = day;
    Log.d("Date", String.valueOf(d_name));
    String dayOfTheWeek = sdf.format(d_name);
    String date = day + "/" + month + "/" +year;
    db = new DatabaseManager(getApplicationContext());
    Log.d("Recipe name", recipe_name);
    db.createPlanRecipe(d_name, dayOfTheWeek, recipe_name);
    db.createPlan(plan_name, id);

}



public void createPlan(String plan_name, Integer plRecipe) {
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor c = db.rawQuery("select last_insert_rowid()",null);
    c.moveToFirst();

    if (c != null && (c.getCount() > 0)) {plRecipe = c.getInt(c.getColumnIndex("id"));}
    db.execSQL(getInsertPlan(plan_name, plRecipe));
}

Richard Deeming

Вы, кажется, забыли сказать нам, в чем дело.

Нажмите на зеленую ссылку "улучшить вопрос" и обновите свой вопрос, чтобы включить полную информацию об ошибке. Не забудьте указать, к какой строке кода он относится.

David Crow

Я использую что-то похожее на следующее:

DatabaseOpenHelper databaseOpenHelper = new DatabaseOpenHelper(this);
SQLiteDatabase db = databaseOpenHelper.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put("CustNum", m_customerInfo.m_nCustNum);
Calendar calNow = Calendar.getInstance();
cv.put("OrderDate", (double) calNow.getTimeInMillis() / 1000.0);
cv.put("Status", OrderInfo.STATUS_NEW);
long lOrderNum = db.insert("Orders", null, cv);
Log.d("Test", "Added order " + lOrderNum);
Это не нужно, чтобы решить вашу проблему, но DatabaseOpenHelper является производным от SQLiteOpenHelper, и я объясню это немного дальше здесь.

1 Ответов

Рейтинг:
0

Gerry Schmitz

Если вы хотите получить "последний" (автоинкрементальный) ID, use: выберите MAX(ID) ...

c# - Как найти максимальный элемент в SQLite? - переполнение стека[^]