Tôi quyết định từ bỏ. Tôi có một cơ sở dữ liệu chứa các tài liệu mô tả một người.
Đây là lớp học của tôi Person
kéo dài 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
}
Thuật toán là đơn giản.
- Tạo một mảng kiểu
Document
- Đặt tài liệu của bạn thành các mảng
- Tạo một yêu cầu HTTP POST
- Đặt JSON quy đổi mảng vào cơ thể yêu cầu
- Gửi nó
Đây gần như là mã trông như thế nào.
Lưu ý: try/catch bị bỏ qua cho ngắn gọn! Tất nhiên bạn được dự kiến sẽ sử dụng chúng.
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();
}
Tôi sẽ mô tả hai phần đáng chú ý trong ví dụ này.
Đầu tiên là tập hợp các tài liệu. Trong trường hợp này tôi sử dụng một mảng thay vì một ví dụ.
Document[] docs = new Document[2];
docs[0] = new Person("John", "Smith", 34);
docs[1] = new Person("Jane", "Smith", 30);
Bạn cũng có thể sử dụng List
và sau đó chuyển đổi nó thành mảng bằng cách sử dụng các phương pháp tiện ích của Java.
Thứ hai là StringEntity
. Theo tài liệu của CouchDB trên HTTP Bulk Document API về sửa đổi nhiều tài liệu với một yêu cầu duy nhất cấu trúc JSON của phần thân yêu cầu của bạn sẽ trông như thế này.
{
"docs": [
DOCUMENT,
DOCUMENT,
DOCUMENT
]
}
Đây là lý do cho định nghĩa hơi xấu xí StringEntity
.
StringEntity data = new StringEntity("{ \"docs\": " + gson.toJson(docs) + "}");
Như một phản ứng bạn sẽ nhận được một mảng JSON chứa các đối tượng có trường đại diện cho * _id * và * _rev * của tài liệu được chèn cùng với chỉ báo trạng thái giao dịch.
Tiết kiệm hàng loạt không được hỗ trợ trong API LightCouch, tuy nhiên nó được lên kế hoạch trong bản phát hành tiếp theo. – ahmedyha
nếu đó là một stopper hiển thị, bạn có thể thực hiện cuộc gọi sử dụng một cái gì đó như Apache Httpclient và Jackson để thực hiện cuộc gọi số lượng lớn của bạn để đi văng – skipy