这一天完全在纠结这个问题
我是将一个NSData的数据存入到了数据库中
const char *sql_stmt = "CREATE TABLE IF NOT EXISTS TEST(ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT, CONTENT BLOB,DATEADDED DATE)";NSString *insertSQL = [NSString stringWithFormat:
                               @"INSERT INTO TEST(name,content,dateadded) VALUES(\"%@\",\"%@\",DATETIME('NOW'))",name.text,personInformationData];创建和插入都是正确的
但是在查找中出了问题
查找语句
NSString *insertSQL = [NSString stringWithFormat:
                               @"INSERT INTO TEST(name,content,dateadded) VALUES(\"%@\",\"%@\",DATETIME('NOW'))",name.text,personInformationData];第一种方式
NSString *content = [[NSString alloc] initWithUTF8String:(const char *)sqlite3_column_text(statement, 0)];
NSLog(@"content = %@",content);
第二种方式
const void *value = sqlite3_column_blob(statement, 0);
int size = sqlite3_column_bytes(statement, 0);
NSData *data1 = [[NSData alloc] initWithBytes:value length:size];
NSLog(@"data1 = %@",data1);我用了两种方式去取得NSData的数据主要第一种是正确的
我想取出的是NSData直接可以使用的
出来的数据请看content = <62706c69 73743030 d4010203 0405088c 8d542474 6f705824 6f626a65 63747358 24766572 73696f6e 59246172 63686976 6572d106 0754726f 6f748001 af102a09 0a131c1d 1e1f292a 2b2c2d2e 2f373f40 58595a5b 5c5d5e5f 60616263 64656667 68697172 78798182 8655246e 756c6cd2 0b0c0d12 5a4e532e 6f626a65 63747356 24636c61 7373a40e 0f101180 02800e80 22802680 29d30b14 0c15181b 574e532e 6b657973 a2161780 058006a2 191a8003 8004800d 544e616d 65575068 6f6e654e 6f635510 6d2a658c d30b140c 20241ba3 21222380 0a800b80 0ca32526 27800780 08800980 0d564d6f 62696c65 56695068 6f6e6554 576f726b 5f101031 20283331 35292032 38342d33 33363258 3436362d 31353638 55323235 2d35d230 31323658 24636c61 73736573 5a24636c 6173736e 616d65a3 3334355f 10134e53 4d757461 626c6544 69637469 6f6e6172 795c4e53 44696374 696f6e61 7279584e 534f626a 6563745f 10134e53 4d757461 626c6544 69637469 6f6e6172 79d30b14 0c383b1b a2393a80 0f8010a2 191a8003 8004800d 6280e17a cbd30b14 0c414c1b aa424344 45464748 494a4b80 18801980 1a801b80 1c801d80 1e801f80 208021aa 4d4e4f50 25525327 55268011 80128013 80148007 80158016 80098017 8008800d 584f7468 65724641 5857486f 6d654641 5857576f 726b4641 58544d61 696e554f 74686572 55506167 65725448 6f6d6558 3534352d 35363636 56353435 2d343555 3434352d 34553433 332d365f 10103120 28353038 29203835 352d3438 33345335 34355534 35342d35 57363534 2d353636 5f101031 20283530 38292038 35352d34 3833365f 10103120 28353038 29203835 352d3438 3335d30b 140c6a6d 1ba26b6c 80238024 a2191a80 03800480 0d629633 4e3dd30b 140c7375 1ba17480 25a12680 08800d5f 10103120 28353535 29203334 352d3535 3635d30b 140c7a7d 1ba27b7c 80278028 a2191a80 03800480 0d625f20 4e09d30b 140c8384 1ba0a080 0dd23031 878ba388 898a5e4e 534d7574 61626c65 41727261 79574e53 41727261 79584e53 4f626a65 63745e4e 534d7574 61626c65 41727261 79120001 86a05f10 0f4e534b 65796564 41726368 69766572 00080011 0016001f 00280032 0035003a 003c0069 006f0074 007f0086 008b008d 008f0091 00930095 009c00a4 00a700a9 00ab00ae 00b000b2 00b400b9 00c100c8 00cf00d3 00d500d7 00d900dd 00df00e1 00e300e5 00ec00f3 00f8010b 0114011a 011f0128 01330137 014d015a 01630179 01800183 01850187 018a018c 018e0190 0195019c 01a701a9 01ab01ad 01af01b1 01b301b5 01b701b9 01bb01c6 01c801ca 01cc01ce 01d001d2 01d401d6 01d801da 01dc01e5 01ed01f5 01fa0200 0206020b 0214021b 02210227 023a023e 0244024c 025f0272 0279027c 027e0280 02830285 02870289 028e0295 02970299 029b029d 029f02b2 02b902bc 02be02c0 02c302c5 02c702c9 02ce02d5 02d602d7 02d902de 02e202f1 02f90302 03110316 00000000 00000201 00000000 0000008e 00000000 00000000 00000000 00000328>
data = <3c363237 30366336 39203733 37343330 33302064 34303130 32303320 30343035 30383863 20386435 34323437 34203666 37303538 32342036 66363236 61363520 36333734 37333538 20323437 36363537 32203733 36393666 36652035 39323436 31373220 36333638 36393736 20363537 32643130 36203037 35343732 36662036 66373438 30303120 61663130 32613039 20306131 33316331 64203165 31663239 32612032 62326332 64326520 32663337 33663430 20353835 39356135 62203563 35643565 35662036 30363136 32363320 36343635 36363637 20363836 39373137 32203738 37393831 38322038 36353532 34366520 37353663 36636432 20306230 63306431 32203561 34653533 32652036 66363236 61363520 36333734 37333536 20323436 33366336 31203733 37336134 30652030 66313031 31383020 30323830 30653830 20323238 30323638 30203239 64333062 31342030 63313531 38316220 35373465 35333265 20366236 35373937 33206132 31363137 38302030 35383030 36613220 31393161 38303033 20383030 34383030 64203534 34653631 36642036 35353735 30363820 36663665 36353465 20366636 33353531 30203664 32613635 38632064 33306231 34306320 32303234 31626133 20323132 32323338 30203061 38303062 38302030 63613332 35323620 32373830 30373830 20303838 30303938 30203064 35363464 36662036 32363936 63363520 35363639 35303638 20366636 65363535 34203537 36663732 36622035 66313031 30333120 32303238 33333331 20333532 39323033 32203338 33343264 33332033 33333633 32353820 33343336 33363264 20333133 35333633 38203535 33323332 33352032 64333564 32333020 33313332 33363538 20323436 33366336 31203733 37333635 37332035 61323436 33366320 36313733 37333665 20363136 64363561 33203333 33343335 35662031 30313334 65353320 34643735 37343631 20363236 63363534 34203639 36333734 36392036 66366536 31373220 37393563 34653533 20343436 39363337 34203639 36663665 36312037 32373935 38346520 35333466 36323661 20363536 33373435 66203130 31333465 35332034 64373537 34363120 36323663 36353434 20363936 33373436 39203666 36653631 37322037 39643330 62313420 30633338 33623162 20613233 39336138 30203066 38303130 61322031 39316138 30303320 38303034 38303064 20363238 30653137 61206362 64333062 31342030 63343134 63316220 61613432 34333434 20343534 36343734 38203439 34613462 38302031 38383031 39383020 31613830 31623830 20316338 30316438 30203165 38303166 38302032 30383032 31616120 34643465 34663530 20323535 32353332 37203535 32363830 31312038 30313238 30313320 38303134 38303037 20383031 35383031 36203830 30393830 31372038 30303838 30306420 35383466 37343638 20363537 32343634 31203538 35373438 36662036 64363534 36343120 35383537 35373666 20373236 62343634 31203538 35343464 36312036 39366535 35346620 37343638 36353732 20353535 30363136 37203635 37323534 34382036 66366436 35353820 33353334 33353264 20333533 36333633 36203536 33353334 33352032 64333433 35353520 33343334 33353264 20333435 35333433 33203333 32643336 35662031 30313033 31323020 32383335 33303338 20323932 30333833 35203335 32643334 33382033 33333435 33333520 33343335 35353334 20333533 34326433 35203537 33363335 33342032 64333533 36333620 35663130 31303331 20323032 38333533 30203338 32393230 33382033 35333532 64333420 33383333 33363566 20313031 30333132 30203238 33353330 33382032 39323033 38333520 33353264 33343338 20333333 35643330 62203134 30633661 36642031 62613236 62366320 38303233 38303234 20613231 39316138 30203033 38303034 38302030 64363239 36333320 34653364 64333062 20313430 63373337 35203162 61313734 38302032 35613132 36383020 30383830 30643566 20313031 30333132 30203238 33353335 33352032 39323033 33333420 33353264 33353335 20333633 35643330 62203134 30633761 37642031 62613237 62376320 38303237 38303238 20613231 39316138 30203033 38303034 38302030 64363235 66323020 34653039 64333062 20313430 63383338 34203162 61306130 38302030 64643233 30333120 38373862 61333838 20383938 61356534 65203533 34643735 37342036 31363236 63363520 34313732 37323631 20373935 37346535 33203431 37323732 36312037 39353834 65353320 34663632 36613635 20363337 34356534 65203533 34643735 37342036 31363236 63363520 34313732 37323631 20373931 32303030 31203836 61303566 31302030 66346535 33346220 36353739 36353634 20343137 32363336 38203639 37363635 37322030 30303830 30313120 30303136 30303166 20303032 38303033 32203030 33353030 33612030 30336330 30363920 30303666 30303734 20303037 66303038 36203030 38623030 38642030 30386630 30393120 30303933 30303935 20303039 63303061 34203030 61373030 61392030 30616230 30616520 30306230 30306232 20303062 34303062 39203030 63313030 63382030 30636630 30643320 30306435 30306437 20303064 39303064 64203030 64663030 65312030 30653330 30653520 30306563 30306633 20303066 38303130 62203031 31343031 31612030 31316630 31323820 30313333 30313337 20303134 64303135 61203031 36333031 37392030 31383030 31383320 30313835 30313837 20303138 61303138 63203031 38653031 39302030 31393530 31396320 30316137 30316139 20303161 62303161 64203031 61663031 62312030 31623330 31623520 30316237 30316239 20303162 62303163 36203031 63383031 63612030 31636330 31636520 30316430 30316432 20303164 34303164 36203031 64383031 64612030 31646330 31653520 30316564 30316635 20303166 61303230 30203032 30363032 30622030 32313430 32316220 30323231 30323237 20303233 61303233 65203032 34343032 34632030 32356630 32373220 30323739 30323763 20303237 65303238 30203032 38333032 38352030 32383730 32383920 30323865 30323935 20303239 37303239 39203032 39623032 39642030 32396630 32623220 30326239 30326263 20303262 65303263 30203032 63333032 63352030 32633730 32633920 30326365 30326435 20303264 36303264 37203032 64393032 64652030 32653230 32663120 30326639 30333032 20303331 31303331 36203030 30303030 30302030 30303030 32303120 30303030 30303030 20303030 30303038 65203030 30303030 30302030 30303030 30303020 30303030 30303030 20303030 30303332 383e>
上面的content是我想要的数据,但是不是NSData类型的,不知道错在哪里

解决方案 »

  1.   

    这是接一楼的部分程序
    #import "ViewController.h"@interface ViewController ()@end@implementation ViewController@synthesize key, name, content, time, status;//data;NSDateFormatter *dateFormatter;
    NSMutableArray *personArray;
    NSString *str ;
    NSData *personInformationData;- (void)viewDidLoad
    {
        [super viewDidLoad];
        
        NSString *docsDir;
        NSArray *dirPaths;
        //寻找数据库的路径,将所有的数据库存入一个数组
        dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDirectory, YES);
        //取得数组中的第一个
        docsDir = [dirPaths objectAtIndex:0];
        //取得的第一个文件中找到或者新建contacts.db
        databasePath = [[NSString alloc] initWithString:
                        [docsDir stringByAppendingFormat:@"test.db"]];
        NSLog(@"%@",databasePath);
        
        NSFileManager *filemgr = [NSFileManager defaultManager];
        
        if(NO == [filemgr fileExistsAtPath:databasePath])
        {
            const char *dbpath = [databasePath UTF8String];
            if(SQLITE_OK == (sqlite3_open(dbpath, &dataDB)))
            {
                //sqlite3_exec执行非查询的语句
                char *errorMsg;
                const char *sql_stmt = "CREATE TABLE IF NOT EXISTS TEST(ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT, CONTENT BLOB,DATEADDED DATE)";
                if (SQLITE_OK == (sqlite3_exec(dataDB, sql_stmt, NULL, NULL, &errorMsg))) 
                {
                    status.text = @"创建表失败";
                }
            }
            else {
                status.text = @"创建、打开数据库失败";
            }
        }
        
    //    NSLog(@"%@",self.data);
    }-(IBAction)SaveToDataBase:(id)sender
    {
    //    NSLog(@"str = %@",str);
        NSLog(@"personInformationData = %@",personInformationData);
    //    personInformationData = [[NSData alloc]init];
    //    personInformationData = self.data;
        NSLog(@"length = %d", [personInformationData length]);
        sqlite3_stmt *statement;
        
        const char *dbpath = [databasePath UTF8String];
        //打开数据库
        if(SQLITE_OK == (sqlite3_open(dbpath, &dataDB)))
        {
            
            
    //        NSString *insertSQL = [NSString stringWithFormat:
    //                               @"INSERT INTO TEST(name,content,dateadded) VALUES(\"%@\",\"%@\",DATETIME('NOW'))",name.text, content.text];
            NSString *insertSQL = [NSString stringWithFormat:
                                   @"INSERT INTO TEST(name,content,dateadded) VALUES(\"%@\",\"%@\",DATETIME('NOW'))",name.text,personInformationData];        const char *insert_stmt = [insertSQL UTF8String];
            //准备sql文
            
            sqlite3_prepare_v2(dataDB, insert_stmt, -1, &statement, NULL);
            
            sqlite3_bind_blob(statement, 2, [personInformationData bytes], [personInformationData length], NULL);
            int size = [personInformationData length];
            //执行SQL文
            if(SQLITE_DONE == (sqlite3_step(statement)))
            {
                status.text = @"已存储到数据库";
                name.text = @"";
                content.text = @"";
                time.text = @"";
            }
            else {
                status.text = @"保存失败";
            }
            
            NSLog(@"status.text = %@",status.text);
            //释放文资源
            sqlite3_finalize(statement);
            //关闭文资源
            sqlite3_close(dataDB);
        }
        //[personInformationData release];
    }-(IBAction)SearchFromDataBase:(id)sender
    {
        const char *dbpath = [databasePath UTF8String];
        //创建数据库句柄
        sqlite3_stmt *statement;
        
        if(SQLITE_OK == (sqlite3_open(dbpath, &dataDB)))
        {
            NSString *querySQL = [NSString stringWithFormat:@"SELECT content,dateadded from TEST where name=\"%@\"",name.text];
            
            const char *query_stmt = [querySQL UTF8String];
            if(SQLITE_OK == (sqlite3_prepare_v2(dataDB, query_stmt, -1, &statement, NULL)))
            {
                if(SQLITE_ROW == (sqlite3_step(statement)))
                {
    //                const void *value = sqlite3_column_blob(statement, 0);
    //                int size = sqlite3_column_bytes(statement, 0);
    //                NSLog(@"size = %d",size);
    //                NSData *data = [[NSData alloc] initWithBytes:value length:size];
    //                NSLog(@"%@",data);
                    NSString *content = [[NSString alloc] initWithUTF8String:(const char *)sqlite3_column_text(statement, 0)];
                    NSLog(@"content = %@",content);
                    const void *value = sqlite3_column_blob(statement, 0);
                    int size = sqlite3_column_bytes(statement, 0);
                    NSData *data1 = [[NSData alloc] initWithBytes:value length:size];
                    NSLog(@"data1 = %@",data1);//                int size = sqlite3_column_bytes(statement, 1);
    //                NSLog(@"size = %d",size);
    //                const void *value = sqlite3_column_blob(statement, 2);
    //                //sqlite3_column_text取text类型的数据 sqlite3_column_int取int类型的数据
    //                NSLog(@"value= %@",value);
    //                if(value!=NULL && size!=0)
    //                {
    //                    NSData *data = [NSData dataWithBytes:value length:size];
    //                    NSArray *array = [[NSArray alloc]init];
    //                    array = [NSKeyedUnarchiver unarchiveObjectWithData:data];
    //                    [data release];
    //                    NSLog(@"%@", array);
    //                    
    //                }
    //                NSData *data = sqlite3_column_blob(statement, 2);
    //                NSArray *array = [[NSArray alloc]init];
    //                array = [NSKeyedUnarchiver unarchiveObjectWithData:data];
    //                NSLog(@"%@", array);
                    status.text = @"已经查到";
                }
                else {
                    status.text = @"未查到结果";
                    content.text = @"";
                    time.text = @"";
                }
                sqlite3_finalize(statement);
            }
            sqlite3_close(dataDB);
        }
    }-(IBAction)ChangeFromDataBase:(id)sender
    {
        const char *dbpath = [databasePath UTF8String];
        //创建数据库句柄
        sqlite3_stmt *statement;
        if(SQLITE_OK == (sqlite3_open(dbpath, &dataDB)))
        {
            NSString *querySQL = [NSString stringWithFormat:@"UPDATE TEST SET CONTENT=\"%@\" WHERE NAME=\"%@\"",content.text,name.text];
            
            const char *query_stmt = [querySQL UTF8String];
            if(SQLITE_OK == (sqlite3_prepare_v2(dataDB, query_stmt, -1, &statement, NULL)))
            {
                if(SQLITE_ROW == (sqlite3_step(statement)))
                {
                    NSLog(@"修改成功");
                }
                else {            }
                sqlite3_finalize(statement);
            }
            sqlite3_close(dataDB);
        }}- (void)viewDidUnload
    {   
        personInformationArray = nil;
        name = nil;
        content = nil;
        time = nil;
        [super viewDidUnload];
        // Release any retained subviews of the main view.
    }- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
    {
        return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
    }@end
      

  2.   

    还是发demo吧,这怎么看?