2013-04-25 23 views
0

我需要創建一個外鍵來映射我的表。 基本上這個外國人是一張桌子的主要關鍵。 但insert語句正在創建一個問題。 它是一個SQLite數據庫。 與主鍵的表是在sqlite數據庫中創建一個外鍵

db.execSQL("CREATE TABLE IF NOT EXISTS " 
      + Main 
      + "(ROWID integer primary key autoincrement NOT NULL,appln_date VARCHAR,appln_no VARCHAR,rupees VARCHAR,tenure VARCHAR,asset VARCHAR);"); 

與外鍵的表

db.execSQL("CREATE TABLE IF NOT EXISTS " 
      + Applicant 
      + "(AppID integer primary key autoincrement, " + 
        "app_salutation VARCHAR,app_fname VARCHAR,app_mname VARCHAR,app_lname VARCHAR,app_door VARCHAR,app_street VARCHAR,app_building VARCHAR,app_area VARCHAR,app_post VARCHAR,app_tehsil VARCHAR,app_state VARCHAR,app_landmark VARCHAR,ROWID integer References "+Main+"(ROWID));"); 

INSERT語句

openOrCreateDatabase(); 
    createappinfo(); 
    String insertString = "insert into " + Applicant 
      + " Values("; 

    String inString = ""; 
    for (int i =0; i < data.size(); i++) { 

     inString = inString + "\"" + data.get(i) + "\","; 

    } 

    inString = inString.substring(0, inString.length() - 1); 
    int row=db.rawQuery("select * from "+Main+";" ,null).getCount()+1; 
    insertString = insertString + row+"," +inString + ");"; 
    System.out.println("** insert value ** " + insertString); 
    db.execSQL(insertString); 

    closeDatabase(); 

但此代碼生成錯誤..

04-25 11:43:57.422: E/SQLiteLog(17825): (1) table applicanttable has 14 columns but 13 values were supplied 
+0

你的錯誤代碼,說,你再次,你的所有'data' – Bigood 2013-04-25 11:59:06

+0

@Bigood第一列提供值只提供13值而不是14.檢查是一個自動增量字段,然後通過上面的代碼填充12列,然後是一個外鍵...所以第一個和最後一個feild值不會被傳遞... wats的錯誤..我似乎可以想象它出 – shivani 2013-04-25 12:07:15

回答

0

你應該讓數據庫這一聲明是這樣的:

CREATE TABLE IF NOT EXISTS "Main" (ROWID integer primary key autoincrement NOT NULL,appln_date VARCHAR,appln_no VARCHAR,rupees VARCHAR,tenure VARCHAR,asset VARCHAR); 
CREATE TABLE IF NOT EXISTS "Applicant" (AppID integer primary key autoincrement, app_salutation VARCHAR,app_fname VARCHAR,app_mname VARCHAR,app_lname VARCHAR,app_door VARCHAR,app_street VARCHAR,app_building VARCHAR,app_area VARCHAR,app_post VARCHAR,app_tehsil VARCHAR,app_state VARCHAR,app_landmark VARCHAR,ROWID integer References "Main"(ROWID)); 
insert into "Applicant" Values("11","a","b","c","d","e","f","g","h","i","j","k","l", (SELECT Count(*) +1 FROM main)); 

在這個例子中的值是隨機的。

所以,如果你100%確定這個你的for語句正確返回除了最後一個以外的所有值。 你的最後一個參數應該是這樣的:

insertString = "ROWID integer References "Main"(ROWID);";