使用查询语言的 Couchbase CRUD 操作

Couchbase CRUD operations with query language

我使用的是 couchbase 4.0 beta 版。而且我能够使用休息服务成功地将对象保存到桶中。现在我需要访问存储桶并使用查询执行 GET、UPDATE 和 DELETE 操作。

这是存储桶中我的示例对象。

{
       "id": "friend403778",
       "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 获取这个对象。但是 id 值包含特殊字符 所以我的查询对它不起作用。我怎样才能访问它???

这是我尝试获取的代码片段 this.It 没有给我 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 获取记录,它也不起作用。 我怎样才能为这个桶写简单的查询。 这些是我尝试过的查询。我的存储桶名称也是 twitter

String strQuery = "SELECT * FROM twitter WHERE domain=" + AppConstants.DOMAIN_FRIEND;
String strQuery = "DELETE FROM twitter WHERE domain=" + AppConstants.DOMAIN_FRIEND;

提前致谢。

构建查询时,您必须使用引号来表明您的 ID 是一个字符串。尝试在构建查询时在您的 ID 周围添加引号:

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