0


私のforeginキーが機能していないという私のコードの問題は何ですか?主キーは正常に機能しています。この方法で作成された3つのテーブルがあります:(一部の単語はポーランド語である可能性があります。件名を渡すために実行しているためですが、これらの単語は重要ではありません(私は推測します))

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更新して後でプッシュボタンでテーブルに適用することでスピナーからこのキーを追加していますが、手動でそのように配置しても

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

どうすればそれを機能させることができるか考えていますか?よろしくお願いします。

4

1 に答える 1

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

データベースにnull値があります...次の値を使用してテーブルを設定することにより、将来これが発生するのを防ぐことができdefaultます + KEY_ID1 + " INTEGER DEFAULT 0, "。現在のテーブルのデータを修正するには、UPDATEコマンドを使用してすべてのnull値を適切なdefault値に変更します。

別の方法は、毎回値をチェックすることです。

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

しかし、それはあなたの問題を解決するための最も遅い方法です。
繰り返しますが、適切な方法を使用する場合、getInt()

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

あなたはこの問題を抱えていないかもしれません...

于 2012-12-27T21:53:22.610 に答える