2012-06-08 5 views
0
-(id)init{ 

if(self==[super init]){ 
    database=nil; 
} 
return self; 

}을 얻기sqlite 데이터베이스에서 데이터를 검색하는 방법은 무엇입니까? 반환 값 제로

- (무효) addDetails : (있는 NSString *) _ 이름 withAddress : (있는 NSString *) _ 주소 withAge : (int)를 _age withMobile : (더블) _mobile {

// NSLog (@ "db 클래스 ---> % @ % @ % d % f", _ name, _address, _age, _mobile); // NSString * name = @ "... 완료했습니다";

if([self openDBConnection] == TRUE) { 

    const char *sql= "insert into Personal (Name,Address,Age,Mobiel) Values(?, ?, ?, ?)"; 

    sqlite3_stmt *updateUser_stmt = nil; 
    NSInteger retVal = sqlite3_prepare_v2(database, sql, -1, &updateUser_stmt, NULL); 
    NSLog(@"the return value is %d",retVal); 
    if(retVal == SQLITE_OK) 
    { 
     sqlite3_bind_text (updateUser_stmt , 1, [_name UTF8String],-1,SQLITE_STATIC); 
     sqlite3_bind_text (updateUser_stmt , 2, [_address UTF8String], -1, SQLITE_STATIC); 
     sqlite3_bind_int(updateUser_stmt, 3, _age); 
     sqlite3_bind_double(updateUser_stmt, 4, _mobile); 
     // sqlite3_bind_text (updateUser_stmt , 4, [HomeUserDetails.strName UTF8String], -1, SQLITE_STATIC); 

     NSInteger resultInt = sqlite3_step(updateUser_stmt); 
     if(SQLITE_DONE != resultInt) 
      NSLog(@"Error while inserting data. '%s'", sqlite3_errmsg(database)); 
     else  
     { 


      NSLog(@"MyA user details added to database"); 
     } 
    } 
    sqlite3_reset(updateUser_stmt); 
    sqlite3_finalize(updateUser_stmt); 
    updateUser_stmt = nil; 
} 

}

- (무효) modifyUserDetails : (사람 *) _ 사람 { NSLog (@ "업데이트에서"); 경우 ([자기 openDBConnection] == TRUE) {

NSString *str = [NSString stringWithFormat:@"UPDATE Personal SET Address='%@', Age='%d' , Mobiel='%d' WHERE Name='%@'",_person.address,[_person getAge],[_person getMobile],_person.name ]; 
    NSLog(@" String :%@",str); 
    //NSString *str = [NSString stringWithFormat:@"UPDATE Room SET Access=1 WHERE RoomName='%@'",room.m_roomName]; 
    const char *sql = [str UTF8String]; 
    // [NSString stringWithFormat:@"UPDATE Room SET Access=%d WHERE RoomName=%@", access,room.m_roomName]; 
    sqlite3_stmt *updateUser_stmt = nil; 
    if(sqlite3_prepare_v2(database, sql, -1, &updateUser_stmt, NULL) == SQLITE_OK) 
    { 
     sqlite3_bind_text(updateUser_stmt, 1, [_person.name UTF8String], -1, SQLITE_STATIC); 
     sqlite3_bind_text(updateUser_stmt, 2, [_person.address UTF8String], -1, SQLITE_STATIC); 
     sqlite3_bind_int(updateUser_stmt, 3, [_person getAge]); 
     sqlite3_bind_double(updateUser_stmt, 4, [_person getMobile]); 

     if(SQLITE_DONE != sqlite3_step(updateUser_stmt)) 
      NSLog(@"Error while updating data data. '%s'", sqlite3_errmsg(database)); 

    } 
    sqlite3_reset(updateUser_stmt); 
    sqlite3_finalize(updateUser_stmt); 
    updateUser_stmt = nil; 
} 

}

- (공극) getUserDetails {

UIApplication *app=[UIApplication sharedApplication]; 
appdlegate=app.delegate; 
if(appdlegate.arrayNames) 
    [appdlegate.arrayNames removeAllObjects]; 
NSLog(@"in get users"); 
if([self openDBConnection] == TRUE) 
{ 

    const char *sql = "select Name,Address,Age,Mobiel from Personal";//AccessLevel,HintA HintQ,Name,pwd 
    sqlite3_stmt *getAccess_stmt = nil; 
    NSInteger retVal = sqlite3_prepare_v2(database, sql, -1, &getAccess_stmt, NULL); 
    if(retVal == SQLITE_OK) 
    { 
     while(sqlite3_step(getAccess_stmt) == SQLITE_ROW) 
     { 

      char* name = (char*) sqlite3_column_text(getAccess_stmt, 0); 
      NSString *tmp; 
      if (name != NULL){ 
       tmp = [NSString stringWithUTF8String:name]; 
       NSLog(@"value form db :%@",tmp); 

      } 
      [appdlegate.arrayNames addObject:tmp]; 
      char *addrs = (char*) sqlite3_column_text(getAccess_stmt, 1); 
      if (addrs != NULL){ 
       NSString *tmp = [NSString stringWithUTF8String:addrs]; 
       NSLog(@"value from db :%@",tmp);  

      } 


      int age =sqlite3_column_int(getAccess_stmt,2); 

      if(age){ 
       NSLog(@"age from db: %d",age); 
      } 
      int mobile=sqlite3_column_double(getAccess_stmt, 3); 
      ; 
      if(mobile){ 
       NSLog(@"mobile from db: %d",mobile);    
      } 

     } 
    } 
    sqlite3_reset(getAccess_stmt); 
    sqlite3_finalize(getAccess_stmt); 
    getAccess_stmt = nil; 
} 

} - (사람 *) getPerticular (는 NSString *) _ 이름 { 사람 * 사람; UIApplication * app = [UIApplication sharedApplication]; appdlegate = app.delegate; NSLog (@ "사용자 가져 오기"); ([자기 openDBConnection] == TRUE) {

 NSString *query = [NSString stringWithFormat:@"select *from Personal where name ='%@'",_name]; 

    const char *sql =[query cStringUsingEncoding:NSASCIIStringEncoding]; 

    //const char *sql = "select *from Personal where name=''";//AccessLevel,HintA HintQ,Name,pwd 
    sqlite3_stmt *getAccess_stmt = nil; 
    NSInteger retVal = sqlite3_prepare_v2(database, sql, -1, &getAccess_stmt, NULL); 
    if(retVal == SQLITE_OK) 
    { 
     person=[[Person alloc]init]; 
     while(sqlite3_step(getAccess_stmt) == SQLITE_ROW) 
     { 

      char* name = (char*) sqlite3_column_text(getAccess_stmt, 0); 
      NSString *tmp; 
      if (name != NULL){ 
       tmp = [NSString stringWithUTF8String:name]; 
       NSLog(@"value perticular form db :%@",tmp); 
       person.name=tmp; 

      } 

      char *addrs = (char*) sqlite3_column_text(getAccess_stmt, 1); 
      if (addrs != NULL){ 
       NSString *tmp = [NSString stringWithUTF8String:addrs]; 
       NSLog(@"value perticular from db :%@",tmp); 
       person.address=tmp; 
      } 


      int age =sqlite3_column_int(getAccess_stmt,2); 

      if(age){ 
       NSLog(@"perticular age from db: %d",age); 
       [person setAge:age]; 
      } 
      int mobile=sqlite3_column_double(getAccess_stmt, 3); 
      ; 
      if(mobile){ 
       NSLog(@"mobile from db: %d",mobile); 
       [person setMobile:mobile]; 
      } 

     } 
    } 
    sqlite3_reset(getAccess_stmt); 
    sqlite3_finalize(getAccess_stmt); 
    getAccess_stmt = nil; 
} 

return person; 

}

가 - (무효) createConnection {

NSError *error; 
NSArray *strdest=[NSArray arrayWithObjects:NSHomeDirectory(),@"Documents",DB_NAME,nil]; 

dest=[NSString pathWithComponents:strdest]; 

NSFileManager *manager=[NSFileManager defaultManager]; 
NSArray *strSrc=[NSArray arrayWithObjects:NSHomeDirectory(),@"SqlliteDemo.app",DB_NAME, nil]; 
NSString *source=[NSString pathWithComponents:strSrc]; 

BOOL sucess=[manager fileExistsAtPath:dest]; 
if(sucess){ 
    NSLog(@"alredy db copied to documents"); 
} 

else { 
    [manager copyItemAtPath:source toPath:dest error:&error]; 
    if(error){ 
     NSLog(@"NO Error"); 

    } 
    else{ 
     NSLog(@"error is %@",error); 
    } 
} 

}

- (BOOL) openDBConnection { [self createConnection]; if (! database) { if (sqlite3_open ([dest UTF8String], & 데이터베이스) == SQLITE_OK) { return TRUE;

}else { 
     return FALSE; 
    } 
}return TRUE; 

}

- (무효) finalizeStatements { 경우 (데이터베이스) sqlite3_close (데이터베이스); }

답변

1

아래와 같이 쿼리에 문제가 있다고 생각되면 명령 줄에서 같은 쿼리를 확인하십시오. 심지어 당신이 제대로 UR 프로젝트에서 DB 파일을 추가했는지 확인하십시오.

NSString *query = [NSString stringWithFormat:@"select *from Personal where name ='%@'",_name]; 
+0

예, 프로젝트에 추가하는 동안 db 파일에 문제가있었습니다. 당신의 도움을 주셔서 감사합니다 :) –

관련 문제