2012-12-27 111 views
0


我想問我的代碼中有什麼問題,我的foregin鍵不起作用。主鍵運行良好。 我有3個表,以這種方式創建:(有些話可以用波蘭語,因爲我正在做它傳遞的問題,但這些話不是importnat(我猜))Foregin關鍵問題android SQLite

private static final String TABLE_CONTACTS = "Kontrahenci"; 
private static final String KEY_ID = "id"; 
private static final String KEY_NAME = "imie"; 
private static final String KEY_SURNAME = "nazwisko"; 
private static final String KEY_STREET = "ulica"; 
private static final String KEY_NRB = "numerBudynku"; 
private static final String KEY_NRL = "numerLokalu"; 
private static final String KEY_KOD = "KodPocztowy"; 
private static final String KEY_CITY = "Miejscowosc"; 
private static final String KEY_NIP = "NIP"; 
private static final String KEY_TEL = "Telefon"; 
private static final String KEY_EMAIL = "Email"; 


private static final String</b> DATABASE_CREATE = "CREATE TABLE " 
+ TABLE_CONTACTS + " (" 
     + KEY_ID +" INTEGER PRIMARY KEY, " 
+ KEY_NAME +" TEXT, " 
+ KEY_SURNAME+" TEXT, " 
+KEY_STREET+" TEXT, " 
+KEY_NRB+" INT(4), " 
+KEY_NRL+" INTEGER(4), " 
+KEY_KOD+" INTEGER(5), " 
+KEY_CITY+" TEXT, " 
+KEY_NIP + " TEXT, " 
+ KEY_TEL+" TEXT, " 
+KEY_EMAIL+" TEXT "+"); "; 



private static final String TABLE_PRODUCTS= "Produkty"; 
private static final String KEY_IDPROD = "id"; 
private static final String KEY_NAMEPROD = "nazwa"; 
private static final String KEY_IMG = "obraz"; 
private static final String KEY_PRICE = "CENA"; 
private static final String DATABASE_PRODUCTS_CREATE = "CREATE TABLE " 
+ TABLE_PRODUCTS + " (" 
     + KEY_IDPROD +" INTEGER PRIMARY KEY, " 
+ KEY_NAMEPROD +" TEXT, " 
+ KEY_IMG+" NUMBER, " 
+KEY_PRICE+" REAL" + "); "; 

private static final String TABLE_ORDER = "Zamowienia"; 
private static final String KEY_IDORD = "id"; 
private static final String KEY_ID1 = "id_kon"; 
private static final String KEY_ID2 = "id_prod"; 
private static final String KEY_ILOSC = "ilosc"; 
private static final String KEY_STATUS = "Status"; 

private static final String DATABASE_ORDERS_CREATE = "CREATE TABLE " + TABLE_ORDER + " (" 
+ KEY_IDORD + " INTEGER PRIMARY KEY, " 
+ KEY_ID1 + " INTEGER, " 
+ KEY_ID2 +" INTEGER, " 
+ KEY_ILOSC + " INTEGER, " 
     + KEY_STATUS + " TEXT, " 
+"FOREIGN KEY (id_kon) REFERENCES "+ TABLE_CONTACTS +"(id), " 
+"FOREIGN KEY (id_prod) REFERENCES " + TABLE_PRODUCTS +"(id));" ; 




public void onCreate(SQLiteDatabase db) { 
    // TODO Auto-generated method stub 

    db.execSQL(DATABASE_CREATE); 
db.execSQL(DATABASE_PRODUCTS_CREATE); 
db.execSQL(DATABASE_ORDERS_CREATE); 

if (!db.isReadOnly()) { 
    db.execSQL("PRAGMA foreign_keys=ON;"); 
    } 
} 

後來我插入數據所有這樣:

public void addProdukt (Produkt produkt){ 
    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues values = new ContentValues(); 
    values.put(KEY_NAMEPROD, produkt.getnazwa()); 
    values.put(KEY_IMG, produkt.getZdj()); 
    values.put(KEY_PRICE, produkt.getCena()); 
db.insert(TABLE_PRODUCTS, null, values); 
db.close();} 


public void addZamow (Zamowienie zamowienie){ 
    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues values = new ContentValues(); 
    values.put(KEY_ID1, zamowienie.getIDk()); 
    values.put(KEY_ID2, zamowienie.getIDp()); 
    values.put(KEY_ILOSC, zamowienie.getIlosc()); 
    values.put(KEY_STATUS, zamowienie.getStatus()); 
    db.insert(TABLE_ORDER, null, values); 
    db.close(); 
} 

沒有FOREIGN KEY所有表工作正常,但是這一次用的時候我想獲得的所有數據都顯示我「找不到源代碼」。我通過更新Integer values後來應用由按鈕來添加TABEL從紗廠這個關鍵,但即使我把手動爲

db.addZamow(new Zamowienie(1,1,x,tstatus)); 

我仍然有這樣的錯誤。要獲得這些元素,我使用這個功能的全部名單:

public List<Zamowienie> getAllZamowienie(){ 

    SQLiteDatabase db = this.getWritableDatabase(); 
    List<Zamowienie> zamowlist = new ArrayList<Zamowienie>(); 

    String selectQuery = "SELECT * FROM " + TABLE_ORDER; 

    Cursor cursor = db.rawQuery(selectQuery, null); 

    if(cursor.moveToFirst()){ 
     do{ 
      Zamowienie zamow = new Zamowienie(); 
      zamow.setID(Integer.parseInt(cursor.getString(0))); 
      zamow.setIDk(Integer.parseInt(cursor.getString(1))); 
      zamow.setIDp(Integer.parseInt(cursor.getString(2))); 
      zamow.setIlosc(Integer.parseInt(cursor.getString(3))); 
      zamow.setStatus(cursor.getString(4)); 

      zamowlist.add(zamow); 
     }while(cursor.moveToNext()); 
    } 

    return zamowlist; 
} 

錯誤出現此行之後:zamow.setIDk(Integer.parseInt(cursor.getString(1)));

你有什麼想法,我怎樣才能使它工作?預先感謝您的答案。

+0

請發表您的logcat的錯誤,也應該使用'cursor.getInt()',而不是'的Integer.parseInt(cursor.getString())'。 – Sam

+0

'java.lang.NumberFormatException:無效int:「null」' - 是我的LogCat錯誤,另一個錯誤是關於我說的這一行。 – carolajnn

回答

0
java.lang.NumberFormatException: Invalid int: "null" 

你有空值在數據庫中...您可以通過你的表設置了default值防止這種情況在將來發生的事情:+ KEY_ID1 + " INTEGER DEFAULT 0, "。要更正當前表中的數據,請使用UPDATE命令將所有空值更改爲適當的default值。

另一種方法是檢查每個價值時間:

String value = cursor.getString(1); 
if(value != null) 
    zamow.setIDk(Integer.parseInt(value)); 

但是,這是解決您的問題最慢方式。
再次,如果您使用適當的方法,getInt()

zamow.setIDk(cursor.getInt(1)); 

你可能不會有這個問題...