0

SQLite データベースで更新を行っています。単一のデータを更新しているとき (データベース フィールドの AcountName が適切に更新されていることを意味します)。しかし、複数のフィールド (AcountName、UserName、Password、Url など) を一緒に更新すると、AcountName との組み合わせのいずれかに注意してください。アプリケーションはsql = [NSString stringWithFormat:@"update UserInfo1 set AcountName=?, UserName=?, Passwordでクラッシュします。 =?, Url=?, Note=? where AcountName='%@'",strAcountName]; )

-(void)updateData:(NSString *)AcName :(NSString *)UsrName :(NSString *)Pswd :(NSString *)url :(NSString *)Note
{
   sqlite3_stmt *updateStatement = nil;
   NSString *sql;
   int returnvalue;

   sql = [NSString stringWithFormat:@"update UserInfo1 set AcountName=?, UserName=?, Password=?, Url=?, Note=? where AcountName='%@'",strAcountName];

   returnvalue = sqlite3_prepare_v2(database, [sql UTF8String], -1, &updateStatement, NULL);

   if (returnvalue == 1)
   {
      NSAssert1 (0,@"Error: failed to prepare statement with message '%s'.", sqlite3_errmsg(database));
   }

   sqlite3_bind_text(updateStatement, 1,[AcName UTF8String], -1, SQLITE_TRANSIENT);

   sqlite3_bind_text(updateStatement, 2,[UsrName UTF8String], -1, SQLITE_TRANSIENT);

   sqlite3_bind_text(updateStatement, 3,[Pswd UTF8String], -1, SQLITE_TRANSIENT);

   sqlite3_bind_text(updateStatement, 4,[url UTF8String],-1, SQLITE_TRANSIENT);

   sqlite3_bind_text(updateStatement, 5,[Note UTF8String], -1, SQLITE_TRANSIENT);

   if(sqlite3_step(updateStatement) != SQLITE_DONE )
   {
       bulDataExist = YES;
       [strAcountName retain];
   }
   else
   {
       sqlite3_reset(updateStatement);
       bulDataExist = NO;
   }
   sqlite3_finalize(updateStatement);
}
 Sent at 6:11 PM on Tuesday

私を修正してください。

ありがとう

4

1 に答える 1

1

strAcountName に問題があると思います。あなたがそれに到達する前に、それは自動リリースされたと思います。電話

[strAcountName retain]

作成したら、呼び出します

[strAcountName release]

使い終わったら。また、SQL の更新が成功した後もそれを保持するのはなぜですか? その時点で投げると思います。

于 2012-08-21T17:07:13.150 に答える