gpt4 book ai didi

java - 数据库产生外键错误结果的问题

转载 作者:行者123 更新时间:2023-11-29 23:16:06 25 4
gpt4 key购买 nike

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

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

我要实现的方法是通过输入相关信息以及外键的 ID。但是,执行此操作时,它会随机更改我插入 ID 的任何 ID:2131165349。我不确定此 ID 来自何处,并且此 ID 不存在于外键最初所在的表中。

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

下面是我的 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);

添加章节 Activity

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();
}
}
});
}

数据库助手

    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;
}

最佳答案

AddChapterActivity 类的监听器的 onClick() 方法中,修改这一行:

int book_id =  textEditBookID.getId();

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

您得到的是 EditTextid 而不是包含您的代码的文本。
我猜(根据它的名字)你在 textEditBookID 中有书的 id,对吧?

关于java - 数据库产生外键错误结果的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55327133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com