У меня есть родительская и дочерняя таблицы, и они связаны с внешним ключом. Я могу полностью сделать 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.