gpt4 book ai didi

iOS/sqlite - 如何将准备好的 sqlite3_stmt 打印到 NSLog

转载 作者:IT王子 更新时间:2023-10-29 06:21:52 24 4
gpt4 key购买 nike

我在将数据插入或替换到我的 sqlite 数据库中时遇到了一些意外结果。为了解决问题,我试图在下面的代码中从准备好的 sqlite3_stmt(语句)中获取完整的打印。

我想做的是这样的事情,但我知道它行不通:

if (sqlite3_step(statement) == SQLITE_DONE) {
NSLog(@"%@", statement);

有没有办法做到这一点?

谢谢!!

sqlite3_stmt *statement;
const char *dbPath = [databasePath UTF8String];

if (true) {

ListingsObject *temp = (ListingsObject *) DatabaseObject;

if (sqlite3_open(dbPath, &conyDB) == SQLITE_OK) {

const char *insertReplaceStmt = "INSERT OR REPLACE INTO listings (id, association_id, name, email, phone, toll_free_phone, fax, website, street, city, state, zipcode, county, bio, featured, hours, lat, lng, updated, status) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";

if (sqlite3_prepare_v2(conyDB, insertReplaceStmt, -1, &statement, NULL) == SQLITE_OK) {
sqlite3_bind_text(statement, 1, [temp._id UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(statement, 2, [temp.associationId UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(statement, 3, [temp.name UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(statement, 4, [temp.email UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(statement, 5, [temp.phone UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(statement, 6, [temp.tollFreePhone UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(statement, 7, [temp.fax UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(statement, 8, [temp.website UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(statement, 9, [temp.street UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(statement, 10, [temp.city UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(statement, 11, [temp.state UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(statement, 12, [temp.zipcode UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(statement, 13, [temp.county UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(statement, 14, [temp.bio UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(statement, 15, [temp.featured UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(statement, 16, [temp.hours UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(statement, 17, [temp.lat UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(statement, 18, [temp.lng UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(statement, 19, [temp.updated UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(statement, 20, [temp.status UTF8String], -1, SQLITE_TRANSIENT);

}
if (sqlite3_step(statement) == SQLITE_DONE) {
NSLog(@"Insert or Replace to Listing Table successful Listing = %@", temp.name);

}else {
NSLog(@"Failed to add to Listing table Listing = %@", temp.name);
}
sqlite3_finalize(statement);
}
sqlite3_close(conyDB);

更新:我还没有找到这个问题的答案。但我需要继续前进,所以我最终只是用 NSLog(); 构造​​了一个字符串;如下所示,对于我必须检查的每张表:

NSLog(@"     INSERT OR REPLACE INTO listings (id, association_id, name, email, phone, toll_free_phone, fax, website, street, city, state, zipcode, county, bio, featured, hours, lat, lng, updated, status) VALUES (\"%@\", \"%@\", \"%@\", \"%@\", \"%@\", \"%@\", \"%@\", \"%@\", \"%@\", \"%@\", \"%@\", \"%@\", \"%@\", \"%@\", \"%@\", \"%@\", \"%@\", \"%@\", \"%@\", \"%@\")", temp._id, temp.associationId, temp.name, temp.email, temp.phone, temp.tollFreePhone, temp.fax
, temp.website, temp.street, temp.city, temp.state, temp.zipcode, temp.county, temp.bio, temp.featured, temp.hours, temp.lat, temp.lng, temp.updated, temp.status);

最佳答案

我没有找到任何标准方法,所以我自己做了:

-(NSMutableString*) sqlite3StmtToString:(sqlite3_stmt*) statement
{
NSMutableString *s = [NSMutableString new];
[s appendString:@"{\"statement\":["];
for (int c = 0; c < sqlite3_column_count(statement); c++){
[s appendFormat:@"{\"column\":\"%@\",\"value\":\"%@\"}",[NSString stringWithUTF8String:(char*)sqlite3_column_name(statement, c)],[NSString stringWithUTF8String:(char*)sqlite3_column_text(statement, c)]];
if (c < sqlite3_column_count(statement) - 1)
[s appendString:@","];
}
[s appendString:@"]}"];
return s;
}

你可以这样调用它:

NSLog(@"%@",[self sqlite3StmtToString:statement]);

观察:我在同一个类(class)做的,因为我用 self 调用它,但你可以在任何类(class)做

关于iOS/sqlite - 如何将准备好的 sqlite3_stmt 打印到 NSLog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9017766/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com