Вставка в дочернюю таблицу sqlite - PullRequest
0 голосов
/ 28 октября 2019

У меня есть родительская и дочерняя таблицы, и они связаны с внешним ключом. Я могу полностью сделать CRUD с родительской таблицей, но со второй таблицей, когда я вставляю строку, она становится нулевой.

Так что это мойкласс базы данных:

private final static String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME +
            "(" + COLUMN_RESTAURANT_ID + " INTEGER PRIMARY KEY ," +
            COLUMN_RESTAURANT_NAME + " TEXT, " +
            COLUMN_RESTAURANT_ADDRESS + " TEXT, " +
            COLUMN_RESTAURANT_TYPE + " INTEGER, " +
            COLUMN_RESTAURANT_IMAGE + " INTEGER);";
    private final static String CREATE_TABLE_NOTES = "CREATE TABLE " + TABLE_NAME_NOTES +
            "(" + COLUMN_NOTES_ID + " INTEGER , "
            + COLUMN_NOTES + " TEXT," + "FOREIGN KEY (" + COLUMN_NOTES_ID + ") REFERENCES " + TABLE_NAME +"(restaurant_id) ON DELETE CASCADE)";
    public final static String DELETE_TABLE = "DROP TABLE IF EXISTS " + TABLE_NAME;
    public RestaurantDBHelper(@Nullable Context context){
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
    @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
    @Override
    public void onConfigure(SQLiteDatabase db) {
        super.onConfigure(db);
        db.setForeignKeyConstraintsEnabled(true);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_TABLE);
        db.execSQL(CREATE_TABLE_NOTES);
    }
 public void addRestaurant(Restaurant restaurant) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(COLUMN_RESTAURANT_NAME, restaurant.getName());
        values.put(COLUMN_RESTAURANT_ADDRESS, restaurant.getAddress());
        values.put(COLUMN_RESTAURANT_TYPE,restaurant.getType());
        values.put(COLUMN_RESTAURANT_IMAGE, restaurant.getType());
        db.insert(TABLE_NAME, null, values);
        db.close();
    }
   public long addNotes (Restaurant restaurant) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(COLUMN_NOTES,restaurant.getNote());
//        values.put(COLUMN_NOTES_ID,restaurant.getId());
       return db.insert(TABLE_NAME_NOTES,null,values);
    }

И мои строки:

public class RestaurantContract {
    public static class EntryRestaurants {
        public final static String TABLE_NAME = "restaurants";
        public final static String COLUMN_RESTAURANT_ID = "restaurant_id";
        public final static String COLUMN_RESTAURANT_NAME = "restaurant_name";
        public final static String COLUMN_RESTAURANT_ADDRESS = "restaurant_address";
        public final static String COLUMN_RESTAURANT_TYPE = "restaurant_type";
        public final static String COLUMN_RESTAURANT_IMAGE = "restaurant_image_type";
        public final static String COLUMN_RESTAURANT_NOTE_ID = "note_id";

        public final static String TABLE_NAME_NOTES = "notes";
        public final static String COLUMN_NOTES_ID = "notes_id";
        public final static String COLUMN_NOTES = "notes_main";

        public final static int RESTAURANT_TYPE_DELIVERY = 1;
        public final static int RESTAURANT_TYPE_SITDOWN = 2;
        public final static int RESTAURANT_TYPE_TAKEAWAY = 3;
    }
}

И в своей основной деятельности я создал contextMenu при длительном нажатии элемента, так что если пользователь хочет добавить заметку впросто нажмите и удерживайте ресторан и выберите в контекстном меню команду «Добавить заметку», после чего появится диалоговое окно с предупреждением с текстом редактирования и кнопкой «Сохранить». Моя основная активность:

 } else if (item.getTitle().equals("Add Note")) {
            AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
            LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
            final View loginForm = inflater.inflate(R.layout.notes, null, false);
            builder.setView(loginForm);
            final AlertDialog dialog = builder.create();
            dialog.getWindow().getAttributes().windowAnimations = R.style.customdialog;
            dialog.show();
            Button saveButton = loginForm.findViewById(R.id.fab);
            saveButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Restaurant restaurant = new Restaurant();
                    RestaurantDBHelper dbHelper = new RestaurantDBHelper(MainActivity.this);
                    dbHelper.addNotes(restaurant);
                    Toast.makeText(MainActivity.this, "you just add a NOTE,BE Happy!", Toast.LENGTH_SHORT).show();

                }
            });

И мой ресторан:

public class Restaurant implements Serializable {
    private int id;
    private int noteID;
    private String note;
    private String name;
    private String address;
    private int type;
    private int image;

    public Restaurant() {
    }
    public Restaurant(String note){
        this.note = note;
    }
    public Restaurant(int id, String name, String address,int type){
        this.id = id;
        this.name = name;
        this.address = address;
        this.type = type;
    }

    public Restaurant(int id,  String name, String address, int type,int image) {
        this.id = id;
        this.name = name;
        this.address = address;
        this.type = type;
        this.image = image;
    }
    public int getId() { return id;}

    public int getNoteID() { return noteID;}

    public void  setNoteID (int noteID) { this.noteID = noteID;}
    public void  setId (int id) { this.id = id;}

    public String getNote() { return note; }

    public void setNote(String note) {this.note = note;}

    public String getName() {
        return name;
    }

    public void setName(String name) { this.name = name;}

    public String getAddress() { return address;}

    public void setAddress(String address) { this.address = address;}

    public void setType(int type) {this.type = type;}

    public int getType() {return type;}

    public int getImage() {return image;}

    public void setImage(int image) {this.image = image;}
}

Я новый в Android.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...