Я использую couchbase 4.0 beta version. И Im успешно смог сохранить объекты в ведро с помощью службы отдыха. Теперь мне нужно получить доступ к ведру и выполнять операции GET, UPDATE и DELETE с помощью запросов.Couchbase CRUD операции с языком запросов
Это мой образец объекта в ковше.
{
"id": "friend$43403778",
"domain": "FRIEND",
"profileId": 43403778,
"screenName": "49ers",
"name": "San Francisco 49ers",
"profileUrl": "http://twitter.com/49ers",
"description": "Official Twitter account of the five-time Super Bowl Champion San Francisco #49ers.",
"friendsCount": 121,
"followersCount": 964650,
"timeZone": "Pacific Time (US & Canada)",
"utcOffset": -25200,
"location": "Santa Clara, CA",
"profileCreated": 1243629277000
}
Теперь я хочу, чтобы получить этот объект, используя идентификатор. Но значение id содержит специальный символ, поэтому мой запрос не работает. Как я могу получить к нему доступ ???
Это мой фрагмент кода, который я пытался получить. Он не дает мне ошибку синтаксиса кода ошибки 300.
String strQuery = "SELECT * FROM twitter WHERE id=" + id;
Bucket bucket = singletonBucket.getBucket();
QueryResult queryResult = bucket.query(Query.simple(strQuery));
List<QueryRow> result = Collections.emptyList();
if (!queryResult.finalSuccess()) {
log.error("Error occur while retrieving TwitterProfile document for id: {}",id);
String errorStr = "";
for (JsonObject error : queryResult.errors()) {
errorStr = error.toString() + ". ";
log.error("{}", error);
}
throw new DataAccessException(errorStr);
} else {
result = queryResult.allRows();
for(QueryRow row: result){
Object doc = row.value().get(AppConstants.BUCKET_NAME);
TwitterProfile twitterProfile = objectMapper.readValue(doc.toString(), TwitterProfile.class);
twitterProfileList.add(twitterProfile);
}
log.info("Successfully found {} TwitterProfile record for id {}",twitterProfileList.size(), id);
return twitterProfileList.size()>0 ?twitterProfileList.get(0):"";
}
Если бы я попытался получить запись с помощью ProfileID Он также не работает. Как написать простые запросы для этого ведра. Это те запросы, которые я пробовал. Также мое имя ведро твиттер
String strQuery = "SELECT * FROM twitter WHERE domain=" + AppConstants.DOMAIN_FRIEND;
String strQuery = "DELETE FROM twitter WHERE domain=" + AppConstants.DOMAIN_FRIEND;
Спасибо заранее.
Это не работает. Я уже пробовал. Спасибо за предложение. – Neero
Можете ли вы разместить свое фактическое сообщение об ошибке? При использовании вашего фрагмента, удаленных твиттер-файлов и ввода моего собственного ведра появляется сообщение об ошибке, которое выглядит так: '{" msg ":" синтаксическая ошибка - в $ 43403778 "," code ": 3000}'. Вы имели в виду код ошибки 3000? При добавлении одиночных кавычек вокруг 'id', как в моем примере, запрос выполняется успешно. – kruthar
Если я передаю его без кавычек, он дает ошибку, о которой вы упомянули. Но если я добавляю кавычки, ошибок нет, но он ничего не возвращает. Это означает, что для запроса нет вывода. Это мой запрос, который я попробовал. 'String strQuery =" SELECT * FROM twitter WHERE id = '"+ id +"' ";' – Neero