首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >数据库为外键生成错误结果的问题

数据库为外键生成错误结果的问题
EN

Stack Overflow用户
提问于 2019-03-25 02:33:41
回答 1查看 30关注 0票数 1

我目前正在努力实现一种方法,通过我的Android Studio项目中的一个接口从我的数据库中添加、编辑、更新和删除信息,当它涉及一个没有外键的表时,我目前可以正确地添加它。

我遇到的问题是,当我尝试使用具有外键的表向我的数据库添加数据时。

我将通过输入相关信息以及外键的ID来实现这一点。但是,在执行此操作时,它会随机更改我插入到ID : 2131165349中的任何ID。我不确定这个ID是从哪里来的,并且这个ID在外键最初所在的表中不存在。

我认为我的问题出在我用来创建表的代码中,该代码参考了我是如何创建具有主键的表的。

下面是我的onCreate方法的代码,它属于这个方法。

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
    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;
        }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-25 03:09:43

AddChapterActivity类中侦听器的onClick()方法中,更改以下行:

代码语言:javascript
复制
int book_id =  textEditBookID.getId();

使用

代码语言:javascript
复制
int book_id =  Integer.parseInt(textEditBookID.getText().toString());

您获得的是EditTextid,而不是代码中的文本。

我猜(通过它的名字)你在textEditBookID中有书的id,对吗?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55327133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档