dayanarak ve birçok şey başarmış ama gerçekten GÜNCELLEME şaşırıpObjective C SQLite Güncelleme Sorgusu kimliği
Ben onun _ID sayısına bağlı olarak tek bir sütunda bir acı güncellemeye çalışıyorum sorgular Bu birincil Anahtar ve benzersizdir.
Google'ın her yerinden tüm kodları denedim. Bu kimse çalıştı diyor ama sütun
güncellenmedi kontrol ederken burada kod NSDateFormatter *formatter;
NSString *dateString;
formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"dd-MM-yyyy HH:mm"];
dateString = [formatter stringFromDate:[NSDate date]];
NSString *IDCODE = code.stringValue;
NSInteger b = [IDCODE integerValue];
sqlite3 *contactDB; //Declare a pointer to sqlite database structure
const char *dbpath = [dbPath UTF8String]; // Convert NSString to UTF-8
if (sqlite3_open(dbpath, &contactDB) == SQLITE_OK)
{
//Database opened successfully
NSString *databaseName = @"vistorlog.db";
// Get the path to the documents directory and append the databaseName
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [documentPaths objectAtIndex:0];
NSString *databasePath = [documentsDir stringByAppendingPathComponent:databaseName];
const char *dbPath=[databasePath UTF8String];
if (sqlite3_open(dbPath, &myDB)==SQLITE_OK) {
NSLog(@"database Opened");
const char* updateQuery="update LOG set TIMEOUT='22/03/19' where _ID=1";
sqlite3_stmt *stmt;
if (sqlite3_prepare_v2(myDB, updateQuery, -1, &stmt, NULL)==SQLITE_OK) {
NSLog(@"Query Executed");
}else{
NSLog(@"Query NOT Executed");
}
}
sqlite3_close(myDB);
}
else {
//Failed to open database
}
Tamam DB vistorlog.db açar olduğunu. LOG adında bir tablo var ve orada TIMEOUT denilen dize hangi dize güncelleştirmek istediğiniz ve orada ne bir temelde _ID denen bir sütun var ben henüz sorguyu temel alıyor
sonunda istiyorum update deyimine sahip olmak için string string dateString öğesini güncellemek ve b tamsayı değişkeni olarak _ID
yanlış nereye gittiğime dair bir fikre sahip olmak için?
Herhangi bir yardım
DÜZENLEME
ÇALIŞMA KOD bir sorgu
sqlite3 *contactDB; //Declare a pointer to sqlite database structure
const char *dbpath = [dbPath UTF8String]; // Convert NSString to UTF-8
if (sqlite3_open(dbpath, &contactDB) == SQLITE_OK)
{
//Database opened successfully
NSString *databaseName = @"vistorlog.db";
// Get the path to the documents directory and append the databaseName
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [documentPaths objectAtIndex:0];
NSString *databasePath = [documentsDir stringByAppendingPathComponent:databaseName];
const char *dbPath=[databasePath UTF8String];
if (sqlite3_open(dbPath, &myDB)==SQLITE_OK) {
NSLog(@"database Opened");
// define dateString and IDCODE as strings before this
const char *updateQuery = "Update log set TIMEOUT=? where _ID=?";
sqlite3_stmt *stmt;
// Prepare Stment
if (sqlite3_prepare_v2(myDB, updateQuery, -1, &stmt, NULL) == SQLITE_OK) {
sqlite3_bind_text(stmt, 1, [dateString UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(stmt, 2, [IDCODE UTF8String], -1, SQLITE_TRANSIENT); if(sqlite3_step(stmt) == SQLITE_DONE) {
NSLog(@"Query Executed");
} else {
NSLog(@"Query NOT Executed: %s", sqlite3_errmsg(myDB));
}
sqlite3_finalize(stmt);
}else{
NSLog(@"Statement NOT Prepared: %s", sqlite3_errmsg(myDB));
}
}
sqlite3_close(myDB);
}
else {
//Failed to open database
}
GÜNCELLENİR Mark
takdir
sqlite3.h ithal etmeyi unutmayın
Mark
ZAMAN AŞIMI alanında ne tür yürütmek sonra
Sen
sqlite3_step()
yürütmek gerekiyor? Ayrıca, '[NSString stringWithUTF8String: sqlite3_errmsg (myDB)] kullanarak oluşturduğunuz hata mesajını yazdırabilirsiniz. Bunu sqlite3_prepare_v2 ifadenizden sonra yapın. Bu, en azından güncelleme çağrısında hangi hatanın gerçekleştiğini size söylemelidir. – Commander147Neden iki kez sqlite3_open 'diyorsun? Neden sadece birini kapatıyorsun? – rmaddy
tüm alanlar bir Integar –