У меня есть следующая функция, которая должна обновлять, а затем извлекать строку таблицы:
MyEntity setRemoteMyEntityGUIGByMyEntityGUID(long myEntityGUID, long remoteMyEntityGUID) {
sqlite3 *db = myDb();
sqlite3_stmt *stmt;
char *sql = "UPDATE ENTITY_TABLE "
"SET REMOTE_ENTITY_GUID = ? " \
"WHERE ENTITY_GUID = ?; " \
"SELECT " \
"ENTITY_GUID, " \
"ENTITY_TYPE, " \
"COLUMN_NAME_UPDATED_DATE " \
"FROM ENTITY_TABLE WHERE " \
"ENTITY_GUID = ?";
int rc = sqlite3_prepare(db, sql, -1, &stmt, 0);
sqlite3_bind_int(stmt, 1, remoteMyEntityGUID);
sqlite3_bind_int(stmt, 2, myEntityGUID);
sqlite3_bind_int(stmt, 3, myEntityGUID);
if (rc != SQLITE_OK) {
fprintf(stderr, "SQL error: %s\n", sqlite3_errmsg(db));
__android_log_print(ANDROID_LOG_ERROR, "MyApp", "ERR : %s", sqlite3_errmsg(db));
}
rc = sqlite3_step(stmt);
MyEntity myEntity;
if (rc == SQLITE_ROW) {
myEntityGUID = sqlite3_column_int(stmt, 0);
char *myEntityType = strdup((const char *) sqlite3_column_text(stmt, 6));
char *timeUpdated = strdup((const char *) sqlite3_column_text(stmt, 9));
myEntity._myEntityGUID = myEntityGUID;
myEntity._myEntityType = myEntityType;
myEntity._timeUpdated = timeUpdated;
sqlite3_finalize(stmt);
sqlite3_close(db);
}
return myEntity;
}
Однако она выполняет только одно из двух: обновлять или извлекать строку таблицы:
char *sql = "UPDATE ENTITY_TABLE "
"SET REMOTE_ENTITY_GUID = ? " \
"WHERE ENTITY_GUID = ?" ;
ИЛИ
char *sql = "SELECT " \
"ENTITY_GUID, " \
"ENTITY_TYPE, " \
"COLUMN_NAME_UPDATED_DATE " \
"FROM ENTITY_TABLE WHERE " \
"ENTITY_GUID = ?";
Это не будет работать полностью, но первая (обновление) часть будет:
char *sql = "UPDATE ENTITY_TABLE "
"SET REMOTE_ENTITY_GUID = ? " \
"WHERE ENTITY_GUID = ?; " \
"SELECT " \
"ENTITY_GUID, " \
"ENTITY_TYPE, " \
"COLUMN_NAME_UPDATED_DATE " \
"FROM ENTITY_TABLE WHERE " \
"ENTITY_GUID = ?";
Чтоя делаю не так?Как я могу заставить его работать?