使用查询语言的 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 + "'";
我使用的是 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 + "'";