Проблема с базой данных, приводящей к неправильным результатам для внешнего ключа - PullRequest
1 голос
/ 24 марта 2019

В настоящее время я работаю над реализацией способа добавления, редактирования, обновления и удаления информации из моей базы данных через интерфейс в моем проекте Android Studio, и в настоящее время я правильно добавляю ее, когда используется таблица без внешнего ключа.

Проблема, с которой я сталкиваюсь, заключается в том, что я пытаюсь добавить данные в свою базу данных с помощью таблицы с внешним ключом.

Метод, которым я бы достиг этого, заключался бы в импутации соответствующей информации, а также идентификатора внешнего ключа.Однако при этом он случайным образом изменит любой идентификатор, который я вставил в идентификатор: 2131165349. Я не уверен, откуда этот идентификатор, и этот идентификатор не существует в таблице, где изначально находится внешний ключ.

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

Ниже приведен мой код для метода onCreate, которому он принадлежит.

public void onCreate(SQLiteDatabase sqLiteDatabase) {
    String sqlBook = "CREATE TABLE book(id INTEGER PRIMARY KEY AUTOINCREMENT, bookName VARCHAR, bookAuthor VARCHAR);";
    String sqlChapter = "CREATE TABLE chapter(id INTEGER PRIMARY KEY AUTOINCREMENT, chapterName VARCHAR, book_id INTEGER, FOREIGN KEY(book_id) REFERENCES book(id))";
    String sqlSection ="CREATE TABLE section(id INTEGER PRIMARY KEY AUTOINCREMENT, sectionName VARCHAR, sectionInfo VARCHAR, book_id INTEGER, chapter_id INTEGER, FOREIGN KEY(book_id) REFERENCES book(id), FOREIGN KEY (chapter_id) REFERENCES chapter(id))";

    sqLiteDatabase.execSQL(sqlBook);
    sqLiteDatabase.execSQL(sqlChapter);
    sqLiteDatabase.execSQL(sqlSection);

AddChapterActivity

public class AddChapterActivity extends AppCompatActivity {

DatabaseHelper db;
Button btnAddChapter, btnViewChapter, btnUpdateChapter, btnDeleteChapter;
EditText textEditChapterName, textEditBookID, textEditChapterID;



@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.add_chapter);

    db = new DatabaseHelper(this);
    btnAddChapter = findViewById(R.id.btnAddChapter);
    btnViewChapter = findViewById(R.id.btnViewChapter);
    btnUpdateChapter = findViewById(R.id.btnUpdateChapter);
    btnDeleteChapter = findViewById(R.id.btnDeleteChapter);
    textEditBookID = findViewById(R.id.textEditBookID);
    textEditChapterName = findViewById(R.id.textEditChapterName);
    textEditChapterID = findViewById(R.id.textEditChapterID);
    addChapter();
}
  public void addChapter(){
    btnAddChapter.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String chapterName = textEditChapterName.getText().toString();
            int book_id =  textEditBookID.getId();

            boolean insertChapter = db.addChapter(chapterName, book_id);

            if(insertChapter == true) {
                Toast.makeText(AddChapterActivity.this, "Chapter added successfully!", Toast.LENGTH_LONG).show();
            }else{
                Toast.makeText(AddChapterActivity.this, "Something went wrong.", Toast.LENGTH_LONG).show();
            }
        }
    });
        }

DatabaseHelper

    public boolean addChapter(String chapterName, Integer book_id){
    SQLiteDatabase db = getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put("chapterName", chapterName);
    contentValues.put("book_id", book_id);
    long result = db.insert("chapter", null, contentValues);
        if(result == -1) {
            return false;
        }else{
            return true;
        }

1 Ответ

1 голос
/ 24 марта 2019

В методе onClick() слушателя в классе AddChapterActivity измените эту строку:

int book_id =  textEditBookID.getId();

с

int book_id =  Integer.parseInt(textEditBookID.getText().toString());

Вы получили EditText id, а не текст с вашим кодом.
Я думаю (по его названию) у вас есть в textEditBookID идентификатор книги, верно?

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