2011-08-05 6 views
0

私は、外部センサからキャプチャしたデータをiphoneで保持するNSMutable配列を持っています。その配列を別のファイルのデータベースにダンプしたいです。そして、私はどのようにそれが行われているのか分かりません。 NSMutableArrayのでNSMutable配列をSqlite3に渡す

Databaseクラス

- (id) init { 
    self = [super init]; 

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,  NSUserDomainMask, YES); 
    NSString *documentsDirecotry = [paths objectAtIndex:0]; 
    NSString *databaseFilePath = [documentsDirecotry stringByAppendingPathComponent:@"ForceGaugeDatabase"]; 

    BOOL databaseExists = [[NSFileManager defaultManager] fileExistsAtPath:databaseFilePath]; 
    database = [[FMDatabase alloc] initWithPath:databaseFilePath]; 
    if(!databaseExists){ 
     [self createDatabase]; 
    } 
    return self; 
} 


-(void) createDatabase{ 

    [database open]; 

    NSString *query = [NSString stringWithString:@"CREATE TABLE forcegauge (forcelb INTEGER, forcekg INTEGER, forcenewton INTEGER, forceoz INTEGER, analoginput INTEGER);"]; 
    if([database executeUpdate:query]) { 

     for(int i = 0; i < 6 ; i++) { 
      query = [NSString stringWithFormat:@"insert into forcegauge (forcelb, forcekg, forcenewton, forceoz, analoginput) values (%d,20,30,40,100,9);", i]; 
      [database executeUpdate:query]; 

      query = [NSString stringWithFormat:@"insert into forcegauge (forcelb, forcekg, forcenewton, forceoz, analoginput) values (%d,34,45,55,90,2);", i]; 
      [database executeUpdate:query]; 

      query = [NSString stringWithFormat:@"insert into forcegauge (forcelb, forcekg, forcenewton, forceoz, analoginput) values (%d,35,55,65,95,3);", i]; 
      [database executeUpdate:query]; 

      query = [NSString stringWithFormat:@"insert into forcegauge (forcelb, forcekg, forcenewton, forceoz, analoginput) values (%d,40, 53, 67,90,4);", i]; 
      [database executeUpdate:query]; 
     } 
    } else { 
     NSLog(@"Error Creating Table"); 
    } 
    [database close];  
} 

クラス。

-(void) forceCalculationKg{ 
    NSNumber *number = [controller. analogInValues objectAtIndex:0]; 
    [controller enableDigitalInputs:YES]; 
    double value = [number doubleValue]; 
    double force; 
    force = 0.2908 *pow(2.718,(1.2089 * value)); 
    double forcekg; 
    forcekg = force/2.2; 
    [kgarray addObject:[NSNumber numberWithDouble:forcekg]]; 

    forceoutput.text = [NSString stringWithFormat:@" %0.1f", forcekg]; 
} 

ここで、kgarrayは、外部センサーを介して更新されているすべてのデータを保持します。そして、私はkgarrayが保持するデータをForceGaugeDatabaseに転送したいと思います。

+0

テーブルの既存の行を更新するか、新しいテーブルを挿入しますか? コードスニペットには、すでにテーブルに新しい行を挿入する方法の例があります。 –

+0

@lunatic新しいテーブルを挿入したいのですが。この挿入はテストと同じです。しかし、私は5つのNSMutable配列を別のクラスに持っています。これは外部センサーからキャプチャされた異なる値を保持しています。だから私はNSNumberとしてそれを抽出し、変数に格納する必要があります。そして私はどのようにNSNumbersをデータベースに渡すことができるのか分かりません。 – ilaunchpad

答えて

0

配列からテーブルに行を挿入するには、配列を反復処理してクエリを実行する必要があります。

NSUInteger totalRows = [firstArray count]; // I suppose, that each array has the same number of items 
for (NSUInteger i = 0; i < totalRows; ++i) { 
    NSNumber *forcelb = [firstArray objectAtIndex:i]; 
    NSNumber *forcekg = [secondArray objectAtIndex:i]; 
    ..... 
    NSString *query = [NSString stringWithFormat:@"insert into forcegauge (forcelb, forcekg, forcenewton, forceoz, analoginput) values (%f , %f, 53, 67,90,4);", [forcelb doubleValue], [forcekg doubleValue]]; 
    [database executeUpdate:query]; 
} 
関連する問題