に基づいており、ほとんどのものを管理しているが、実際にUPDATEに貼り付けていますが、私はその_ID番号を基準にして、1列目の刺し傷を更新しようとしていますのObjective C Sqliteを更新クエリがラッパーを使用せずにSQLiteにも学ぼうとID
を問い合わせますこれは主キーであり、ユニークです。
私はすべての種類のコードをgoogleから試しました。この1は、それが働いていると言うが、私は列が
を更新されていない確認したときに、ここでそれは、DBのvistorlog.dbは、[OK]を開くコード
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
}
です。 LOGと呼ばれるテーブルがあり、TIMEOUTという列があります。この列には、文字列を更新したいところがありますが、_IDという列がありますが、まだ更新されていないクエリをベースにしています。
更新ステートメントに文字列変数dateStringを更新する文字列として使用し、bを_IDの整数変数として使用するようにするには
すべてのヘルプは、マーク
EDIT
WORKING CODEはsqlite3.h
マーク
をインポートすることを忘れないでくださいQUERYsqlite3 *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
}
を更新するために
を高く評価しました
を実行した後
sqlite3_step()
を実行する必要がありますか?また、 '[NSString stringWithUTF8String:sqlite3_errmsg(myDB)]'を使用して生成されたエラーメッセージを出力することもできます。これはsqlite3_prepare_v2ステートメントの後で行います。少なくとも更新呼び出しでどのようなエラーが発生しているかを教えてください。 – Commander147なぜ 'sqlite3_open'を2回呼び出しますか?なぜあなたはそれらのうちの1つだけを閉じますか? – rmaddy
すべてのフィールドは、Integerの_ID以外のテキストです –