图像不存储在sqlite中

问题描述:

我制作了一个将Image存储到数据库的演示。目前我没有收到任何错误,但我的图像不存储在sqlite数据库中。
请看下面的代码并告诉我我的错误在哪里。

I made one demo which stores an Image to the database. Currently I am not getting any error but my image is not store in sqlite database. Please see the below code and tell me where is my mistake.

DBManager类

sqlite3 *sqlite3DatabaseObject;
sqlite3_stmt* sqlite3Statement;
-(void)database
{

    directoryPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    documentsDirectory = [directoryPaths objectAtIndex:0];
    NSString * databasePath = [[NSString alloc]initWithString:[documentsDirectory stringByAppendingPathComponent:@"informationdb.sql"]];
    NSFileManager *fileManager = [NSFileManager defaultManager];
    if ([fileManager fileExistsAtPath:databasePath] == NO) {
        const char *dbPath = [databasePath UTF8String];
        if (sqlite3_open(dbPath, &sqlite3DatabaseObject)== SQLITE_OK) {
            char * errorMessage;
            const char *sqlite3Query = "CREATE TABLE IF NOT EXISTS PICTURES (PHOTO BLOB)";
            if (sqlite3_exec(sqlite3DatabaseObject, sqlite3Query, NULL, NULL, &errorMessage)!= SQLITE_OK) {
                NSLog(@"failed = %@",sqlite3DatabaseObject);
            }
            sqlite3_close(sqlite3DatabaseObject);
        }else{
            NSLog(@"failed to create database");
        }
    }
}
- (void) SaveImagesToSql: (NSData*) imgData  {

    NSString *databasePath = [[NSBundle mainBundle] pathForResource:@"informationdb" ofType:@"sql"];

    const char* sqlite3Query = "INSERT INTO PICTURES (PHOTO) VALUES (?)";
    int openDatabaseResult = sqlite3_open_v2([databasePath UTF8String], &sqlite3DatabaseObject, SQLITE_OPEN_READWRITE , NULL);
    if (openDatabaseResult == SQLITE_OK) {
        int sqlite3Prepare = sqlite3_prepare_v2(sqlite3DatabaseObject, sqlite3Query, -1, &sqlite3Statement, NULL);
        if( sqlite3Prepare == SQLITE_OK ) {
            sqlite3_bind_blob(sqlite3Statement, 1, [imgData bytes], [imgData length], SQLITE_TRANSIENT);
            sqlite3_step(sqlite3Statement);
        }
        else
        {
            NSLog(@"Error is: %s", sqlite3_errmsg(sqlite3DatabaseObject));
        }
        sqlite3_finalize(sqlite3Statement);

    }
    else NSLog( @"Error is:  %s", sqlite3_errmsg(sqlite3DatabaseObject) );
    sqlite3_close(sqlite3DatabaseObject);
}

ViewController类

- (void)viewDidLoad {
    [super viewDidLoad];
    DBManager * dbmClass = [[DBManager alloc]init];
    [dbmClass database];

    imgView.userInteractionEnabled = YES;
    UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(uploadOrCapture)];
    [singleTap setNumberOfTapsRequired:1];
    [imgView addGestureRecognizer:singleTap];

}
- (IBAction)btnSave:(id)sender {
    DBManager*dbmClass = [[DBManager alloc]init];
    NSData *imageInData = UIImagePNGRepresentation(imgView.image);
    [dbmClass SaveImagesToSql:imageInData];
    [self dismissViewControllerAnimated:YES completion:nil];
}

我无法找到问题所在。它成功执行了所有代码,但是当我从设备下载数据库并检查时,没有存储图像数据。

I am not able to find out the issue. It successfully executes all the code but when I download the database from device and checked, there is no image data stored.

提前致谢。

Mihir。

Thanks in advance.
Mihir.

将此函数替换为我的代码,因为您的数据库路径错误

just replace this function to my code because you got wrong database path

- (void) SaveImagesToSql: (NSData*) imgData  {

    directoryPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    documentsDirectory = [directoryPaths objectAtIndex:0];
    NSString * databasePath = [[NSString alloc]initWithString:[documentsDirectory stringByAppendingPathComponent:@"informationdb.sql"]];

    const char* sqlite3Query = "INSERT INTO PICTURES (PHOTO) VALUES (?)";
    int openDatabaseResult = sqlite3_open_v2([databasePath UTF8String], &sqlite3DatabaseObject, SQLITE_OPEN_READWRITE , NULL);
    if (openDatabaseResult == SQLITE_OK) {
        int sqlite3Prepare = sqlite3_prepare_v2(sqlite3DatabaseObject, sqlite3Query, -1, &sqlite3Statement, NULL);
        if( sqlite3Prepare == SQLITE_OK ) {
            sqlite3_bind_blob(sqlite3Statement, 1, [imgData bytes], [imgData length], SQLITE_TRANSIENT);
            sqlite3_step(sqlite3Statement);
        }
        else
        {
            NSLog(@"Error is: %s", sqlite3_errmsg(sqlite3DatabaseObject));
        }
        sqlite3_finalize(sqlite3Statement);

    }
    else NSLog( @"Error is:  %s", sqlite3_errmsg(sqlite3DatabaseObject) );
    sqlite3_close(sqlite3DatabaseObject);
}

这里是数据库截图

不要拖动到项目中的数据库。如果出现任何问题,请告诉我

Don't drag to database in your project.if any problem than tell me