2013-04-25 4 views
0

테이블을 매핑하기 위해 외래 키를 생성해야합니다. 기본적으로이 foreign 키는 테이블의 기본 키입니다. 하지만 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);"); 

인 삽입 명령문

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

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

있는 외부 키 테이블이 되나,이 코드는 에러를 발생한다 ..

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

귀하의 오류 코드가 다시 당신이 data' – Bigood

+0

@Bigood 첫'모든 컬럼에 대한 값을 제공하고 있습니다 만 (13) 값 대신 14. 공급 말한다 자동 증가 필드입니다 12 열 위의 코드를 통해 채워집니다 다음 외래 키 theres ... 그래서 첫 번째 및 마지막 feild 값을 전달할 수 없습니다 ... wats 오류 .i 그것을 이해할 수 있습니다. 아웃 – shivani

답변

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

이 예제의 값은 임의적입니다.

이렇게하면 for 문이 마지막 문장을 제외한 모든 값을 올바르게 반환하는지 100 % 확신 할 수 있습니다. 귀하의 마지막 인수는 다음과 같이한다 :

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