2015-10-07 5 views
1

Я создал простое приложение java в качестве моего мини-проекта в колледже, в котором один из модулей позволяет пользователям выполнять такие операции, как вставка, удаление, обновление, поиск Для целей проверки я хочу, чтобы пользователь отображал сообщение об ошибке если он пытается удалить запись, которой нет в БД, как «Извините, запись не найдена» Я попробовал try catch block, чтобы проверить, что если mongodb выдает исключение, если документ не найден, но этот dont работал ... im совершенно новый на JAVA, а также MongoDB, так что я понятия не имею об этом, может кто-то пожалуйста, помогите мне ... Вот мой код deleteActionPerformed и о том, что я пыталсяКак проверить, существует ли документ с помощью Mongodb и JAVA?

private void deleteActionPerformed(java.awt.event.ActionEvent evt) {          
     try 
     { 

     DBCollection col=db.getCollection("activity"); //my collection name is activity 
     if(!Tid.getText().equals("")) //Tid is the TextField in which i am taking input of _id 
     { 
     col.remove(new BasicDBObject().append("_id",(Object)Tid.getText())); 
     } 
     else 
      JOptionPane.showMessageDialog(null,"Please Enter the ID"); 

     }catch(Exception e) 
     { 
      JOptionPane.showMessageDialog(null,"Record not Found "+e); 
     } 
    } 

Тестовый захват блокировки работал, поскольку java или mongodb не генерируют исключение исключенного типа ...

ответ

0

Это может быть не самым эффективным способом, но он должен работать. Я адаптировал его из моего кода, который ищет конкретное значение документа (кроме _id). Может существовать специализированный метод для _id.

/** 
* Checks if an activity exists with a given id. if no such activity exists 
* returns false. Returns true for one or more activities with a matching 
* id. 
* 
* @param db 
* @param id 
* @return boolean - true if one or more functions with matching names exit. 
*/ 
public static boolean activityExists(MongoDatabase db, ObjectId id) { 
    FindIterable<Document> iterable = db.getCollection("activity").find(new Document("_id", id)); 
    return iterable.first() != null; 
} 

EDIT: Кажется, что лучше использовать метод подсчета. Пожалуйста, обратитесь к следующему ответу https://stackoverflow.com/a/32509268/2520767.

0

В вашем случае значительно быстрее использовать функцию find() + limit(), поскольку findOne() всегда будет читать + возвращать документ, если он существует. find() просто возвращает курсор (или нет) и только считывает данные, если вы перебираете курсор.

Таким образом, вместо:

db.collection.findOne ({_ ID: «MyId»}, {_id: 1})

вы должны использовать:

db.collection.find ({_id: "myId"}, {_id: 1}). limit (1)

Смежные вопросы