ios - funktioniert - Bild nicht in SQLite speichern




divi builder funktioniert nicht (2)

Ich habe eine Demo gemacht, die ein Bild in der Datenbank speichert. Zur Zeit bekomme ich keinen Fehler, aber mein Bild wird nicht in der SQLite-Datenbank gespeichert. Bitte sehen Sie den folgenden Code und sagen Sie mir, wo ist mein Fehler.

DBManager-Klasse

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-Klasse

- (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];
}

Ich kann das Problem nicht herausfinden. Es führt den gesamten Code erfolgreich aus, aber wenn ich die Datenbank vom Gerät herunterlade und überprüfe, sind keine Bilddaten gespeichert.

Danke im Voraus.
Mihir.


Ersetzen Sie diese Funktion einfach durch meinen Code, weil Sie einen falschen Datenbankpfad erhalten haben

- (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);
}

Hier ist dies Datenbank-Screenshot

Ziehen Sie nicht in Ihr Projekt in die Datenbank. Wenn Sie ein Problem haben, sagen Sie es mir


Hier Wie ändere ich nach Ihrer Verwendung.

NSData *imageData = UIImagePNGRepresentation(imgView.image);
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

NSString *documentsDirectory = [paths objectAtIndex:0];

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeStyle: NSDateFormatterShortStyle];
dateFormatter.dateFormat = @"ddMMyyyyhhmmss_SSS_a";
NSString *currentTime = [dateFormatter stringFromDate: [NSDate date]];

NSString *imageName=[NSString stringWithFormat:@"Image_%@",currentTime];

NSString *saveFilePath =[NSString stringWithFormat:@"%@.%@",imageName,@"png"];  //Store saveFilePath string to your database

NSString *localFilePath1 = [documentsDirectory stringByAppendingPathComponent:saveFilePath];

[imageData writeToFile:localFilePath1 atomically:YES];

Hoffe es hilft dir.





uiimage