java - 插入命令上的 SQLite 外键不匹配

标签 java android database sqlite

03-27 10:39:55.279 23303-23303/com.example.danyalahmed.stockmanagement E/SQLiteLog: (1) foreign key mismatch - "Product" referencing "Category" 03-27 10:39:55.280 23303-23303/com.example.danyalahmed.stockmanagement E/SQLiteDatabase: Error inserting Code=2536 Price=5 CategoryID=1 Quantity=2 Name=Olá android.database.sqlite.SQLiteException: foreign key mismatch - "Product" referencing "Category" (code 1): , while compiling: INSERT INTO PRODUCT(Code,Price,CategoryID,Quantity,Name) VALUES (?,?,?,?,?) at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:895) at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:506) at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) at android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:58) at android.database.sqlite.SQLiteStatement.(SQLiteStatement.java:31) at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1469) at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1341) at com.example.danyalahmed.stockmanagement.Classes.DbAdapter.insertData(DbAdapter.java:131) at com.example.danyalahmed.stockmanagement.Activities.Scan_Page$3.onClick(Scan_Page.java:162) at android.view.View.performClick(View.java:4856) at android.view.View$PerformClick.run(View.java:19956) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:211) at android.app.ActivityThread.main(ActivityThread.java:5373) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1020) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:815)

如果你检查这个,

Error inserting Code=2536 Price=5 CategoryID=1 Quantity=2 Name=Olá

您可以看到我的 CategoryID = 1。

当我创建数据库时,我将类别放在那里:

INSERT INTO Category VALUES(1, 'OTHERS');
INSERT INTO Category VALUES(2, 'Crisp');
INSERT INTO Category VALUES(3, 'Sweet');

这是产品结构:

CREATE TABLE IF NOT EXISTS Product (" +
      " _id INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL  UNIQUE," +
      "Name VARCHAR NOT NULL," +
      "Code VARCHAR NOT NULL," +
      "Quantity INTEGER NOT NULL," +
      "PRICE DOUBLE NOT NULL," +
      "CategoryID INTEGER NOT NULL," +
      "FOREIGN KEY(CategoryID) REFERENCES Category(ID));

这里是查询:

public boolean insertData(String Table, String[] Columns, String[] Values) {   
    db = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    for (int i = 1; i < Columns.length; i++) {
        contentValues.put(Columns[i].replace(Table + ".", ""), Values[i].trim());
    }
    return ((db.insert(Table, null, contentValues)) != -1);
}

感谢任何帮助。

谢谢。

最佳答案

我的 Crystal 球告诉我你没有阅读 documentation并且忘记将 Category 表的 ID 列设为主键。

关于java - 插入命令上的 SQLite 外键不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36246077/

相关文章:

c# - 如何获取数据库序列生成的新对象 ID?

java - 从 JSP 页面调用 servlet 上的函数

java - Eclipse 的 $FALL-THROUGH$ 评论标准吗?

android - map 上点之间的方向?

android - 在android应用程序的webview中加载url时启动画面

database - 您可以在生产系统中使用对象数据库吗?

java - Spring SimpleTriggerContext 获取正确的 nextExecutionTime

java - 如何使用微服务多个实例刷新请求 token

Android:QuickContactBadge 中的奇怪行为

database - 用户定义的数据对象——什么是最好的数据存储策略?