2015-07-30 3 views
0

Я использую 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; 

Спасибо заранее.

ответ

0

При построении запроса вы должны использовать кавычки, чтобы указать, что ваш идентификатор является строкой. Попытайтесь добавить котировки вокруг своего идентификатора при построении запроса:

String strQuery = "SELECT * FROM twitter WHERE id='" + id + "'"; 
+0

Это не работает. Я уже пробовал. Спасибо за предложение. – Neero

+0

Можете ли вы разместить свое фактическое сообщение об ошибке? При использовании вашего фрагмента, удаленных твиттер-файлов и ввода моего собственного ведра появляется сообщение об ошибке, которое выглядит так: '{" msg ":" синтаксическая ошибка - в $ 43403778 "," code ": 3000}'. Вы имели в виду код ошибки 3000? При добавлении одиночных кавычек вокруг 'id', как в моем примере, запрос выполняется успешно. – kruthar

+0

Если я передаю его без кавычек, он дает ошибку, о которой вы упомянули. Но если я добавляю кавычки, ошибок нет, но он ничего не возвращает. Это означает, что для запроса нет вывода. Это мой запрос, который я попробовал. 'String strQuery =" SELECT * FROM twitter WHERE id = '"+ id +"' ";' – Neero

Смежные вопросы