2014-02-21 3 views
0

Я пытаюсь принести документ формы CouchDB его _idКак найти документ по _id в couchdb?

Если документ присутствует в базе данных, то она возвращает документ JSON,

Else, если документ не присутствует в базе данных она возвращает мне исключение ,

Я пытаюсь это сделать в своем коде:.

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); 

* (здесь имя_бд это имя базы данных и Email_id является ._id документа) *

я должен проверить, является ли документ с этим email_id присутствует или нет. Использование getDocument("") функция, для документа, которой нет в базе данных, выбросить исключение

Исключение :.net.sf.json.JSONException: JSONObject["error"] is not a JSONObject.

Я должен создать документ, если его нет в моей базе данных.

+1

Вы можете разместить запрос о ваш код? –

+0

Строка dbname = "abc"; Строка Email_Id = "[email protected]"; Session session = new Session ("192.168.1.43", 5984); База данных базы данных = session.getDatabase (dbname); Документ doc = database.getDocument (Email_id); * (здесь dbname - это имя базы данных, а Email_id - ._id документа) * Мне нужно проверить, присутствует ли документ с этим адресом электронной почты или нет. с использованием функции getDocument для документа, отсутствующего в базе данных, выдает Execption, описанную выше. –

+0

Пожалуйста, разместите этот код в запросе, вы можете его отредактировать и добавить форматированный код, чтобы он был более читабельным. Также укажите свой импорт, чтобы мы знали, какую библиотеку вы используете «ektorp»? –

ответ

0

Обычно способ проверки наличия документа в couchdb отправляет HTTP head request. Взглянув на класс Database в couchdb4j, который является библиотекой, которую вы используете в своем проекте, у них, похоже, нет метода для этого. В ektorp, другая java-библиотека couchdb, у них есть способ contains, который делает это.

Таким образом, у вас есть следующие варианты:

1.- Используйте ЭКТОРПА вместо couchdb4j в проекте.

2.- Внесите свой собственный метод для выполнения запроса head.

3.- Оберните свой звонок в блок catch try.

4.- Откройте запрос на couchdb4j для использования метода contain с использованием головки.

0

Импортируется (файл банку для использования является 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 
    } 
Смежные вопросы