2016-03-27 122 views
0

10月3日至27日:39:55.279 23303-23303/com.example.danyalahmed.stockmanagement E/SQLiteLog:(1)外鍵不匹配 - 「產品」 引用 「分類「03-27 10:39:55.280 23303-23303/com.example.danyalahmed.stockmanagement E/SQLiteDatabase: 插入Code = 2536 Price = 5 CategoryID = 1 Quantity = 2 Name =Olá android.database.sqlite錯誤。 SQLiteException:外鍵不匹配 - 「產品」引用「類別」(代碼1):,在編譯時:INSERT INTO PRODUCT(代碼,Price,CategoryID,Quantity,Name)VALUES(?,?,?,?,?) 在 android.database.sqlite.SQLiteConnection.nativePrepareStatement在 android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:895)(母語 方法) 在 android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java :506) 在 android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) 在android.database.sqlite.SQLiteProgram(SQLiteProgram.java:58) 在 android.database.sqlite.SQLiteStatement。 (SQLiteStatement.java:31) at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1469) 在 android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1341) 在 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) 在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) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:815)SQLite的外鍵不匹配

,如果你檢查這一點,

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

你可以看到我有CategoryID = 1。

當我創建DB我放在那裏的類別:

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

任何幫助非常感謝。

謝謝。

+0

你確定這些值實際上是插入到他的數據庫?您是否增加了數據庫版本以在添加插入後進行初始化? –

+0

感謝您的幫助。 –

+1

分類表的結構是什麼? – Abdullah

回答

0

我的水晶球告訴我你沒看過documentation,忘記了Category表的ID列是主鍵。

+0

女士們,先生們,把你們的賭注:) – Yazan

+0

那是附近的某處,我做了_id不ID –