iphone - 我如何通过iphone开发存储来自SQLite数据库的数据

标签 iphone objective-c ios sqlite soap

我在将数据从 SQLite 数据库存储到服务器时遇到问题。 这是我的代码:

    NSString *query = @"SELECT ROW,PHOTO1 BLOB,BLG_NAME TEXT,ST_NO TEXT,ST_NAME TEXT,ST_DIR TEXT,MUNI TEXT,PROVINCE TEXT,BLG_TYPE TEXT,BLG_ACC TEXT,BLG_AMN TEXT,LONGI TEXT,LATI TEXT FROM ATTRI4 WHERE FLAG = ?";

    sqlite3_stmt *statement;
    if(sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, nil) == SQLITE_OK)
    {
        sqlite3_bind_int(statement,1,0);

        while(sqlite3_step(statement)==SQLITE_ROW)
        {
            NSLog(@"Data==>%@",[NSString stringWithFormat: @"%s",(char *)sqlite3_column_text(statement, 0)]);
            NSLog(@"Data1==>%@",[NSString stringWithFormat: @"%s",(char *)sqlite3_column_text(statement, 1)]);
            NSLog(@"Data==>%@",[NSString stringWithFormat: @"%s",(char *)sqlite3_column_text(statement, 2)]);
            NSLog(@"Data1==>%@",[NSString stringWithFormat: @"%s",(char *)sqlite3_column_text(statement, 3)]);
            NSLog(@"Data==>%@",[NSString stringWithFormat: @"%s",(char *)sqlite3_column_text(statement, 4)]);
            NSLog(@"Data1==>%@",[NSString stringWithFormat: @"%s",(char *)sqlite3_column_text(statement, 5)]);
            NSLog(@"Data==>%@",[NSString stringWithFormat: @"%s",(char *)sqlite3_column_text(statement, 6)]);
            NSLog(@"Data1==>%@",[NSString stringWithFormat: @"%s",(char *)sqlite3_column_text(statement, 7)]);
            NSLog(@"Data==>%@",[NSString stringWithFormat: @"%s",(char *)sqlite3_column_text(statement, 8)]);
            NSLog(@"Data1==>%@",[NSString stringWithFormat: @"%s",(char *)sqlite3_column_text(statement, 9)]);
            NSLog(@"Data==>%@",[NSString stringWithFormat: @"%s",(char *)sqlite3_column_text(statement, 10)]);
            NSLog(@"Data1==>%@",[NSString stringWithFormat: @"%s",(char *)sqlite3_column_text(statement, 11)]);
            NSLog(@"Data==>%@",[NSString stringWithFormat: @"%s",(char *)sqlite3_column_text(statement, 12)]);

            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"in retrival!!!!"
                                                            message:nil
                                                           delegate:nil
                                                  cancelButtonTitle:@"OK"
                                                  otherButtonTitles:nil];

            [alert show];
            [alert release];

            NSString *data0 = [NSString stringWithFormat: @"%s",(char *)sqlite3_column_text(statement, 2)];
            NSString *data1 = [NSString stringWithFormat: @"%s",(char *)sqlite3_column_text(statement, 3)];
            NSString *data2 = [NSString stringWithFormat: @"%s",(char *)sqlite3_column_text(statement, 4)];
            NSString *data3 = [NSString stringWithFormat: @"%s",(char *)sqlite3_column_text(statement, 5)];
            NSString *data4 = [NSString stringWithFormat: @"%s",(char *)sqlite3_column_text(statement, 6)];
            NSString *data5 = [NSString stringWithFormat: @"%s",(char *)sqlite3_column_text(statement, 7)];
            NSString *data6 = [NSString stringWithFormat: @"%s",(char *)sqlite3_column_text(statement, 8)];
            NSString *data7 = [NSString stringWithFormat: @"%s",(char *)sqlite3_column_text(statement, 9)];
            NSString *data8 = [NSString stringWithFormat: @"%s",(char *)sqlite3_column_text(statement, 10)];
            NSString *data9 = [NSString stringWithFormat: @"%s",(char *)sqlite3_column_text(statement, 11)];
            NSString *data10 = [NSString stringWithFormat: @"%s",(char *)sqlite3_column_text(statement, 12)];
            NSString *data11 = @"123456788";
            NSString *data12 = @"png";

            NSData *data = [[NSData alloc] initWithBytes:sqlite3_column_blob(statement, 1) length:sqlite3_column_bytes(statement,1)];

            if(data == nil)
            {
                NSLog(@"No image");
            }
            else
            {
                base64EncodedimageData = [self base64StringFromData:data length:[data length]];

                NSLog(@"imagedataencded=%@",base64EncodedimageData);
                // [imgarray1 addObject: base64EncodedimageData];

            }

            /********************** SYNC WITH THE SERVER ****************************/


            NSString *soapMessage = [NSString stringWithFormat:
                                                  @"<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n"
                                                    "<SOAP-ENV:Envelope SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:ns7475=\"some URL/\">\n"
                                                    "<SOAP-ENV:Body>\n"
                                                      "<ns7475:saveFile xmlns:ns7475=\"http://demo.digi-corp.com:82/Nilesh/FDCT/img_server.php\">\n"
                                            "<buildingName xsi:type=\"xsd:string\">%@</buildingName>\n"
                                            "<streetNumber xsi:type=\"xsd:string\">%@</streetNumber>\n"
                                              "<streetName xsi:type=\"xsd:string\">%@</streetName>\n"
                                         "<streetDirection xsi:type=\"xsd:string\">%@</streetDirection>\n"
                                            "<municipality xsi:type=\"xsd:string\">%@</municipality>\n"
                                                "<province xsi:type=\"xsd:string\">%@</province>\n"
                                            "<buildingType xsi:type=\"xsd:string\">%@</buildingType>\n"
                                          "<buildingAccess xsi:type=\"xsd:string\">%@</buildingAccess>\n"
                                       "<buildingAmenities xsi:type=\"xsd:string\">%@</buildingAmenities>\n"
                                               "<longitude xsi:type=\"xsd:string\">%@</longitude>\n"
                                                "<latitude xsi:type=\"xsd:string\">%@</latitude>\n"
                                                   "<devID xsi:type=\"xsd:string\">%@</devID>\n"
                                                "<filetype xsi:type=\"xsd:string\">%@</filetype>\n"
                                                "<filedata xsi:type=\"xsd:base64Binary\">%@</filedata>\n"
                                                     "</ns7475:saveFile>\n"
                                                   "</SOAP-ENV:Body>\n"
                                                   "</SOAP-ENV:Envelope>\n",data0,
                                              data1,
                                              data2,
                                              data3,
                                              data4,
                                              data5,
                                              data6,
                                              data7,
                                              data8,
                                              data9,
                                              data10,
                                              data11,
                                              data12,
                                              base64EncodedimageData];

            data0 = nil;
            data1 = nil;
            data2= nil;
            data3= nil;
            data4= nil;
            data5= nil;
            data6= nil;
            data7= nil;
            data8= nil;
            data9= nil;
            data10= nil;
            data11= nil;
            data12= nil;
            base64EncodedimageData= nil;
            recordctr++;

            NSLog(soapMessage);
            NSURL *url = [NSURL URLWithString:@"someURL"];
            NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url];
            NSString *msgLength = [NSString stringWithFormat:@"%d", [soapMessage length]];

            [theRequest addValue: @"text/xml; charset=ISO-8859-1" forHTTPHeaderField:@"Content-Type"];
            [theRequest addValue: @"some URL" forHTTPHeaderField:@"SOAPAction"];

            [theRequest addValue: msgLength forHTTPHeaderField:@"Content-Length"];
            [theRequest setHTTPMethod:@"POST"];
            [theRequest setHTTPBody: [soapMessage dataUsingEncoding:NSUTF8StringEncoding]];
            NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];

            if(theConnection)
            {
                webData = [[NSMutableData data] retain];
                NSLog(@"connection established");
                //NSLog( webData);
            }
            else
            {
                NSLog(@"theConnection is NULL");
            }
            NSHTTPURLResponse *response = nil;

            NSError *error = [[NSError alloc] init];
            NSData *responseData = [NSURLConnection sendSynchronousRequest: theRequest
                                                         returningResponse:&response
                                                                    error : &error];

            NSLog(@"Response code= %d", [response statusCode] );
            NSLog(@"Content-type : @", [[response allHeaderFields] objectForKey: @"Content-type"]);

            if([response statusCode] >=200 && [response statusCode ] <300)
                NSLog(@"connection established  1");
        }

        sqlite3_finalize(statement);         
    }           
}

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    [webData setLength: 0];
}

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    [webData appendData:data];
    NSLog(@"webdatappende %@",webData);
}

-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    NSLog(@"ERROR with theConenction");
    NSLog(@"webdata=%@",webData);
    [connection release];
    [webData release];
}

-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSLog(@"DONE. Received Bytes: %d", [webData length]);
    NSString *theXML = [[NSString alloc] initWithBytes: [webData mutableBytes] length:[webData length] encoding:NSUTF8StringEncoding];
    NSLog(theXML);
    [theXML release];

    if(xmlParser)
    {
        [xmlParser release];
    }

    xmlParser = [[NSXMLParser alloc] initWithData: webData];
    [xmlParser setDelegate: self];
    [xmlParser setShouldResolveExternalEntities: YES];
    [xmlParser parse];

    [connection release];
    [webData release];  
}

-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *) namespaceURI qualifiedName:(NSString *)qName
   attributes: (NSDictionary *)attributeDict
{
    if([elementName isEqualToString:@"SOAP-ENV:Envelope"])
    {
        if(!soapResults)
        {
            soapResults = [[NSMutableString alloc] init];
        }
        recordResults = TRUE;
    }
}
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    if(recordResults)
    {
        [soapResults appendString: string];
        NSLog(@" %@* ",string);
    }
}
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
    if([elementName isEqualToString:@"SOAP-ENV:Envelope"])
    {
        recordResults = FALSE;
        NSLog( @"soap results= %@" ,soapResults);
        NSLog( @"ele name=%@ ",elementName);

        soapResults = nil;
    }
}

问题是,我得到了服务器的响应,但随后控制转到了 [XML parse],这里我得到了一个异常:

DONE. Received Bytes: 484
2009-05-13 12:33:34.215 Camera[1854:20b] <?xml version="1.0" encoding="ISO-8859-1"?><SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><ns1:saveFileResponse xmlns:ns1="http://demo.digi-corp.com:82/Nilesh/FDCT/img_server.php"><return xsi:type="xsd:string">32</return></ns1:saveFileResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>

Program received signal:  “EXC_BAD_ACCESS”.

Unable to disassemble objc_msgSend.

最佳答案

如果你设置

 [xmlParser setShouldResolveExternalEntities: YES];

你的代表必须有这个方法

 parser:foundExternalEntityDeclarationWithName:publicID:systemID: 

关于iphone - 我如何通过iphone开发存储来自SQLite数据库的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/856491/

相关文章:

ios - 是否可以在 JSON 数据中搜索特定键?

objective-c - 了解何时使用继承来允许一个类使用另一个类的实例

ios - AFNetworking 错误域代码=-999?但是工作正常吗?

iphone - 从应用程序 (AVPlayer - MPVolumeView) 在 Apple TV 上播放元数据

ios - 以编程方式创建 plist 文件而不从我的主包中复制 plist

iphone - 从 iPhone 将图像上传到 Rails 服务器(使用 Dragonfly)

iphone - 是否有可能(如何)让应用程序在 iPhone 的聚光灯搜索中返回自定义搜索结果?

iphone - 将文本添加到 UIWebView 文本框

objective-c - 如何在 Objective-C 中找到分隔符?

objective-c - 如何通过关系做Core Data查询?