2013-03-19 6 views
0

Я новичок в лотосе. Мне нужно получить информацию из базы данных Lotus с помощью Java. У меня есть база данных:Lotus получение поля из базы данных

Session session = NotesFactory.createSession(host, user, pwd); 
Database database = session.getDatabase(server, database); 

У меня есть, что информация:

field - fldContractorCode; 
form - form="formAgreement"; 

Например, поле "ABCDE"; Итак, как я могу получить информацию из этой базы данных? Мне нужно использовать формулу сшивки? Или какие методы мне нужно использовать? Спасибо за помощь.

UPD

Теперь я использую такой способ:

DocumentCollection collection = DATABASE.search("form=\"formAgreement\""); 
Document doc = collection.getFirstDocument(); 
while(doc != null) { 
    doc.getItemValueString("fldContractorCode"); 
    doc = collection.getNextDocument(); 
} 

И это отлично работает для меня, но я думаю, что способ не очень удобно, потому что, чтобы найти какой-нибудь документ, например, с полем = "abcd" Мне нужно каждый раз перебирать коллекцию ... Поэтому я прошу какой-то способ найти документ по значению поля. И я не понимаю, что такое VIEW в базе данных и где можно получить это имя VIEW.

+0

Обязательно переработайте(). –

+0

В какой момент? –

+1

Когда объект больше не нужен. Например, ваш цикл выше может привести к сбою клиента/сервера с условием отсутствия памяти. Вот хорошая запись. http://www.bobzblog.com/tuxedoguy.nsf/dx/geek-o-terica-5-taking-out-the-garbage-java –

ответ

2

В существующем коде, вы можете просто изменить одну строку:

DocumentCollection collection = DATABASE.search("form=\"formAgreement\ & "fldContractorCode=\"abcd\""); 

Однако это будет медленным, если база данных содержит много документов. Для лучшей производительности вам следует подумать о том, чтобы использовать Domino Designer для добавления нового представления в вашу базу данных и использования метода getDocumentByKey(), предложенного в других ответах. Если это не вариант, предложение Саймона об использовании метода FTSearch() выполняется быстрее, чем метод Search(), но только если для базы данных существует полный текстовый индекс. Он также имеет несколько иной синтаксис для строки поиска.

1

Существует несколько способов получить документ.

1. Поиск документа из представления, где первый столбец представления содержит отсортированное значение fldContractorCode.

Например:

String key = "abide"; 
View view = db.getView("viewName"); 
Document doc = view.getDocumentByKey(key, true); 

2. Вы можете использовать базу данных FTSearch метод сделать полнотекстовый поиск, чтобы найти нужный документ. Вам понадобится база данных для создания полного текстового индекса.

3. Если вы знаете идентификатор UNID или идентификатор документа, вы можете использовать getDocumentByUNID() или getDocumentByID().

Ваш вопрос довольно широк, поэтому я рекомендую прочитать Infocenter, поскольку он детализирует пример кода для каждого метода.

http://publib.boulder.ibm.com/infocenter/domhelp/v8r0/topic/com.ibm.designer.domino.main.doc/H_NOTESDATABASE_CLASS_JAVA.html

+0

Thanx в любом случае. И могу ли я использовать в поисковой формуле что-то вроде этой формы form = «form» «WHERE fldContractoCode =« abcd », чтобы получить необходимый документ, а не полные коллекции документа? UPD. Извините, я читал ваш ответ невнимательно! –

1

Вам придется перейти к ДОКУМЕНТА (а не форма) вы хотите, чтобы получить поле из.

Lotus Notes имеет очень простой и понятный иерархический способ добраться туда, где вы хотите. Вам нужно будет создавать объекты в этой последовательности:

Session 
Database 
View 
Document 

Допустим, у вас есть вид называется $ (sysAgreements), что перечислить все формы «formAgreement». Его формула выбора будет что-то вроде этого:

SELECT Form="formAgreement" 

Чтобы попасть в документ или документы, которые вы хотите вы будете делать что-то вроде этого:

Session session = NotesFactory.createSession(host, user, pwd); 
Database database = session.getDatabase(server, database); 
View view = database.getView("$(sysAgreements)"); 
Document doc = view.getDocumentByKey(VIEW_KEY); 
String fieldContent = doc.getItemValueString("fldContractorCode"); 

Есть несколько способов получения информации из Заметки база данных. Это одна из них. Имейте в виду, что ключ, используемый Notes для поиска с помощью getDocumentByKey, является первым отсортированным столбцом.

Если вы хотите получить несколько документов, которые вы можете использовать:

DocumentCollection docCol = view.getAllDocumentsByKey(VIEW_KEY); 

, а затем итерацию над ним.

Избегайте делать ftsearch, потому что это медленно и немного больно для Notes. Предпочитаю смотреть в представлениях.

Также важным источником помощи является помощь Notes. Получите базу данных справки с компьютера, на котором установлен Клиент разработки Notes. Но обратите внимание на название помощи, которую вы выбираете, есть 3 справки в Notes: клиент, разработка и администрирование. Разработка - это то, что вы хотите.

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