2014-02-21 54 views
0

餘米試圖通過其_id如何在couchdb中用_id查找文檔?

如果文件是存在於數據庫中,然後返回文檔JSON來獲取文件形式的CouchDB,

否則,如果文件不存在於數據庫中,它返回我異常。

我在我的代碼中試試這個:。

String dbname="abc"; 

String Email_Id="[email protected]"; 

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.

我必須創建該文檔,如果它不存在於我的數據庫中。

+1

你可以張貼的查詢你的代碼? –

+0

String dbname =「abc」; String Email_Id =「[email protected]」; 會話會話=新會話(「192.168.1.43」,5984); Database database = session.getDatabase(dbname); Document doc = database.getDocument(Email_id); *(這裏的dbname是數據庫的名稱,Email_id是文檔的._id)* 我必須檢查帶有這個email_id的文檔是否存在。 對數據庫中不存在的文檔使用getDocument函數拋出上面討論的Execption。 –

+0

請將此代碼發佈到查詢中,您可以對其進行編輯並添加格式化的代碼,使其更具可讀性。還包括你的進口,因爲我們知道你正在使用'ektorp'的庫? –

回答

0

正常情況下,檢查couchdb中是否存在文檔的方法是發送HTTP head request。看看你在項目中使用的庫couchdb4j中的Database類,他們似乎沒有辦法做到這一點。在ektorp,另一個couchdb java庫中,他們有這樣做的方法contains

因此,您有以下選擇:

1.-使用EKTORP而不是couchdb4j在您的項目。

2.-實施您自己的方法做head請求。

3.-將您的呼叫包裹在try catch塊中。

4.-打開對couchdb4j的請求,使其具有使用頭的contain方法。

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 
    }