Postanowiłem spróbować. Posiadam bazę danych przechowującą dokumenty opisujące daną osobę.
Oto moja Person
klasa, która rozciąga Document
LightCouch:
public class Person extends Document {
private String firstname = "";
private String lastname = "";
private int age = -1;
public Person(String firstname, String lastname, int age) {
super();
this.setFirstname(firstname);
this.setLastname(lastname);
this.setAge(age);
}
// setters and getters omitted for brevity
}
Algorytm jest prosty.
- Utwórz tablicę typu
Document
- Umieść swoje dokumenty do tablicy
- Tworzenie żądania HTTP POST
- umieścić JSON konwertowane tablicę do treści żądania
- wysłać go
Z grubsza wygląda to, jak kod mógłby wyglądać.
Uwaga: try/catch pominięto dla zwięzłości! Oczywiście należy ich używać.
public static void main(String[] args) {
// You could also use a List and then convert it to an array
Document[] docs = new Document[2];
docs[0] = new Person("John", "Smith", 34);
docs[1] = new Person("Jane", "Smith", 30);
DefaultHttpClient httpClient = new DefaultHttpClient();
// Note the _bulk_docs
HttpPost post = new HttpPost("http://127.0.0.1:5984/persons/_bulk_docs");
Gson gson = new Gson();
StringEntity data =
new StringEntity("{ \"docs\": " + gson.toJson(docs) + "}");
data.setContentType("application/json");
post.setEntity(data);
HttpResponse response = httpClient.execute(post);
if (response.getStatusLine().getStatusCode() != 201) {
throw new RuntimeException("Failed. HTTP error code: "
+ response.getStatusLine().getStatusCode());
}
BufferedReader br = new BufferedReader(
new InputStreamReader((response.getEntity().getContent())));
String output;
while ((output = br.readLine()) != null) {
System.out.println(output);
}
httpClient.getConnectionManager().shutdown();
}
Opiszę dwie części godne uwagi w tym przykładzie.
Pierwsza to zbiór dokumentów. W tym przypadku użyłem tablicy zamiast na przykład List
.
Document[] docs = new Document[2];
docs[0] = new Person("John", "Smith", 34);
docs[1] = new Person("Jane", "Smith", 30);
Można użyć List
jak również i później przekonwertować je do tablicy przy użyciu metod użytkowych Java.
Drugi to StringEntity
. Zgodnie z dokumentacją CouchDB na HTTP Bulk Document API w sprawie modyfikowania wielu dokumentów za pomocą jednego żądania struktura JSON w treści żądania powinna wyglądać następująco.
{
"docs": [
DOCUMENT,
DOCUMENT,
DOCUMENT
]
}
To jest powód, dla nieco brzydki StringEntity
definicji.
StringEntity data = new StringEntity("{ \"docs\": " + gson.toJson(docs) + "}");
W odpowiedzi otrzymasz tablicę JSON zawierającą obiekty, których pola reprezentują * _id * i * _rev * włożonego dokumentu wraz ze wskaźnikiem stanu transakcji.
Zapisywanie zbiorcze nie jest obsługiwane w interfejsie API LightCouch, ale jest planowane w następnym wydaniu. – ahmedyha
jeśli jest to korek, możesz zadzwonić za pomocą czegoś takiego jak Apache Httpclient i Jackson, aby sprawić, że twoje zbiorowe połączenie z kanapą – skipy