Как пройти несколькими идентификатор столбца в другую таблицу в способ в 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
, и я объясню это немного дальше здесь.