2013-04-25 24 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);";