我正在尝试通过_id
获取文档表单couchdb如果文档存在于数据库中,则它返回文档JSON,
否则,如果数据库中没有文档,则会返回异常。
我在我的代码中尝试这个:。
String dbname="abc";
String Email_Id="uvw@xyz.com";
Session session = new Session("localhost", 5984);
Database database = session.getDatabase(dbname);
Document doc = database.getDocument(Email_id);
*(此处 dbname 是数据库的名称, Email_id 是文档的._id)*
我必须检查包含此email_id的文档是否存在。
使用getDocument("")
函数,对于数据库中不存在的文档,抛出异常
例外:。 net.sf.json.JSONException: JSONObject["error"] is not a JSONObject.
如果我的数据库中没有该文档,我必须创建该文档。
答案 0 :(得分:0)
通常,检查couchdb中文档是否存在的方法是发送HTTP head request。看一下Database中couchdb4j类,它是您在项目中使用的库,它们似乎没有方法可以执行此操作。在ektorp,另一个couchdb java库中,他们使用方法contains来完成它。
因此,您有以下选择:
1.-在项目中使用ektorp而不是couchdb4j。
2.-实施您自己的方法来执行head请求。
3.-在try catch块中包裹您的电话。
4.-向couchdb4j打开一个使用head contain
方法的请求。
答案 1 :(得分:0)
导入是(要使用的jar文件是CouchDb4j.0.1.2.jar)
import com.fourspaces.couchdb.Database;
import com.fourspaces.couchdb.Document;
import com.fourspaces.couchdb.Session;
import com.fourspaces.couchdb.ViewResults;
创建以下方法以检查电子邮件是否存在
boolean emailexists= checkIfExists(couchdbServer, couchdbserverPort, couchDbName, emailid)
{
if (emailexists)
{
log.debug("email already exists in the database");
}
else
{
CouchDBHandler cdb = new CouchDBHandler(couchDbName,couchdbServer,couchdbserverPort);
String addedid = cdb.addEmail(email);
}
}
public static boolean checkIfExists(String couchdbServer,String couchdbserverPort,String couchDbName,String idtoCheck) throws ClientProtocolException, IOException {
HttpClient httpclient = new DefaultHttpClient();
StringBuffer sbserverURL = new StringBuffer(); sbserverURL.append("http://").append(couchdbServer).append(":").append(couchdbserverPort).append("/").append(couchDbName).append("/").append(idtoCheck);
log.debug("Server URL is:"+sbserverURL.toString());
HttpGet get = new HttpGet(sbserverURL.toString());
HttpResponse response = httpclient.execute(get);
HttpEntity entity=response.getEntity();
InputStream instream = entity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(instream));
String strdata = null;
StringBuffer sb = new StringBuffer();
while( (strdata =reader.readLine())!=null)
{
sb.append(strdata);
}
if (sb.toString().indexOf("not_found") > -1) {
return false;
}
else
return true;
}
public String addEmail(email)
{
Document doc = new Document();//CouchDb4j jar file has this function
doc.setId(email);
db.saveDocument(doc); //private Database db; //CouchDb4j jar file has this function
}