如何在couchdb中通过_id查找文档?

时间:2014-02-21 12:02:49

标签: java json gwt couchdb

我正在尝试通过_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.

如果我的数据库中没有该文档,我必须创建该文档。

2 个答案:

答案 0 :(得分:0)

通常,检查couchdb中文档是否存在的方法是发送HTTP head request。看一下Databasecouchdb4j类,它是您在项目中使用的库,它们似乎没有方法可以执行此操作。在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
    }