2012-02-10 12 views
0

私はテーブルに倍数の値を挿入する必要があるiphoneアプリケーションで作業しています。 次のコードを使用していますが、構文エラーが表示されます。私の構文はどこが間違っていますか?複数の値をsqliteに挿入する

INSERT INTO `ark1` (`A`, `B`, `C`) VALUES 
('IKE', 'BEFÄLHAVARE OCH MILITÄRER', ' USA'), 
('LEE', 'BEFÄLHAVARE OCH MILITÄRER', ' USA'), 
('NEY', 'BEFÄLHAVARE OCH MILITÄRER', ' FRAN'), 
('ALBA', 'BEFÄLHAVARE OCH MILITÄRER', ' SPAN'), 
('FOCH', 'BEFÄLHAVARE OCH MILITÄRER', ' FRAN'), 
('GIAP', 'BEFÄLHAVARE OCH MILITÄRER', ' VIET'), 
('HAIG', 'BEFÄLHAVARE OCH MILITÄRER', ' USA') 

おかげ

+3

公式のSQLiteリリースでは、マルチVALUESの挿入はサポートされていません。しかし、開発ブランチはこの機能を持つようにアップグレードされました。 [http://www.sqlite.org/src/info/eb3b6a0ceb](http://www.sqlite.org/src/info/eb3b6a0ceb)(このコメントは今年の後半にこのstackoverflowページを読んだ人のためのものですまたは2013年) – pestophagous

答えて

0

は、データベースのデータベース

初期化定数の

-(id)init{ 
    if(self=[super init]) { 
     documentsDirectory_Statement; 
     documentsDirectory=[documentsDirectory stringByAppendingPathComponent:@"yourApplication.sqlite"]; 
     self.dbPath=documentsDirectory; 
     NSFileManager *fm=[NSFileManager defaultManager]; 
     if(![fm fileExistsAtPath:self.dbPath]) { 
      NSString *localDB=[[NSBundle mainBundle] pathForResource:@"yourApplication" ofType:@"sqlite"]; 
      NSError *err; 
      if(![fm copyItemAtPath:localDB toPath:self.dbPath error:&err]){ 
       NSLog(@"Error in creating DB -> %@",err); 
      } 
     } 

     if(sqlite3_open([self.dbPath UTF8String], &database) !=SQLITE_OK){ 
      NSLog(@"error while opening database."); 
     } else { 
      sqlite3_close(database); 
     } 
    } 
    return self; 
} 

番号

#define PUT_Value(_TO_,_FROM_) { \ 
NSString *str=[dObj valueForKey:_FROM_]; \ 
if(!str) [email protected]" "; \ 
sqlite3_bind_text(compiledStmt,_TO_,[str UTF8String],-1,SQLITE_TRANSIENT); \ 
} 

#define PUT_Blob(_TO_,_FROM_) { \ 
    sqlite3_bind_blob(compiledStmt,_TO_,[[dObj valueForKey:_FROM_] bytes],[[dObj valueForKey:_FROM_] length],NULL);\ 
} 

#define PUT_Integer(_TO_,_FROM_) { \ 
    NSInteger numbr=[[dObj valueForKey:_FROM_] intValue]; \ 
    sqlite3_bind_int(compiledStmt,_TO_,numbr); \ 
} 


#define PUT_Double(_TO_,_FROM_) { \ 
CGFloat doubleX=[[dObj valueForKey:_FROM_] floatValue]; \ 
sqlite3_bind_double(compiledStmt,_TO_,doubleX); \ 
} 


#define PUT_Date(_TO_,_FROM_) { \ 
sqlite3_bind_text(compiledStmt,_TO_, [[[dObj valueForKey:_FROM_] description] UTF8String], -1, SQLITE_TRANSIENT);\ 
} 


#define GET_Value(_TO_,_FROM_) NSString *_TO_; { \ 
const unsigned char *c=sqlite3_column_text(compiledStmt,_FROM_); \ 
_TO_= c ? [NSString stringWithUTF8String:(char*)c] : @"" ; \ 
} 

#define GET_Double(_TO_,_FROM_) double _TO_;{ \ 
_TO_=sqlite3_column_double(compiledStmt,_FROM_); \ 
} 

#define GET_Integer(_TO_,_FROM_) NSUInteger _TO_; { \ 
_TO_ = sqlite3_column_int(compiledStmt,_FROM_); \ 
} 

#define GET_Date(_TO_,_FROM_) { \ 
_TO_=sqlite3_column_double(compiledStmt, _FROM_)];\ 
} 

#define GET_Blob(_TO_,_FROM_) { \ 
_TO_=sqlite3_column_blob(compiledStmt, _FROM_) length:sqlite3_column_bytes(compiledStmt, _FROM_)];\ 
} 

挿入Funcation

-(void)insertItem:(NSArray*)arItem{ 

    sqlite3_stmt *compiledStmt; 
    if(sqlite3_open([self.dbPath UTF8String], &database) ==SQLITE_OK) { 


     sqlite3_prepare_v2(database, "BEGIN TRANSACTION", -1, &compiledStmt, NULL); 
     sqlite3_step(compiledStmt); 
     sqlite3_finalize(compiledStmt); 

     const char *sqlInsertQry="insert into alarm (id,years,months,days,hours,minutes,seconds,body) values(?,?,?,?,?,?,?,?)"; 
     if(sqlite3_prepare_v2(database, sqlInsertQry, -1, &compiledStmt, NULL) == SQLITE_OK){ 
      for (NSDictionary *dObj in arItem) { 
       PUT_Integer(1,@"id"); 
       PUT_Integer(2,@"years"); 
       PUT_Integer(3,@"months"); 
       PUT_Integer(4,@"days"); 
       PUT_Integer(5,@"hours"); 
       PUT_Integer(6,@"minutes"); 
       PUT_Integer(7,@"seconds");     
       PUT_Value(8,@"body");     


       NSUInteger err = sqlite3_step(compiledStmt); 
       if (err != SQLITE_DONE){ 
        NSLog(@"error while binding %d %s",err, sqlite3_errmsg(database)); 
       } 
       sqlite3_reset(compiledStmt); 
      } 
      sqlite3_finalize(compiledStmt);  
     } else { 
      NSLog(@"Invalid Query"); 
     } 
     sqlite3_prepare_v2(database, "END TRANSACTION", -1, &compiledStmt, NULL); 
     sqlite3_step(compiledStmt); 
     sqlite3_finalize(compiledStmt); 
     sqlite3_close(database); 
    } else { 
     NSLog(@"error while opening database."); 
    } 
} 

にデータを挿入するために使用することですこのコードがデータベース接続の実装に役立つことを願っています。

@Samuelではなく、通常のコンマ区切りの挿入値が、可能です

0

あなたは配列を作成し、sqliteのに挿入する必要があり、あなたの上記のクエリのためにsqliteのテーブルSqliteへのデータを挿入するには、このチュートリアルを試してみてください。次のコード

+0

しかし、プログラムではなく手動でsqliteデータベースのクエリを実行してデータを挿入する必要があります –

+0

どのブラウザを使用してクエリを追加していますか – Hiren

1

はい、それは値のセットから、文の生成を自動化するために少し醜いが、十分に簡単だ

insert into myTable (col1,col2) 
    select aValue as col1,anotherValue as col2 
    union select moreValue,evenMoreValue 
    union... 

...これを試してみてください。また、最初の選択で列名を宣言するだけでよいようです。

関連する問題