2011-11-14 22 views
6

Tôi đã cài đặt jOOQ vào nhật thực, các lớp được tạo cho mySQL của tôi, nhưng tôi vẫn gặp sự cố khi viết một số truy vấn cơ bản.jOOQ chèn truy vấn với các khóa được tạo trở lại

tôi đã cố gắng để soạn truy vấn chèn với trở các phím tạo ra, nhưng trình biên dịch ném lỗi

Bảng: tblCategory Cột: category_id, PARENT_ID, tên, rem, uipos

Result<TblcategoryRecord> result= create.insertInto(Tblcategory.TBLCATEGORY, 
    Tblcategory.PARENT_ID, Tblcategory.NAME, Tblcategory.REM, Tblcategory.UIPOS) 
     .values(node.getParentid()) 
     .values(node.getName()) 
     .values(node.getRem()) 
     .values(node.getUipos()) 
     .returning(Tblcategory.CATEGORY_ID) 
     .fetch(); 

cố gắng cũng khác differnt cách cách thực hiện đúng cách?

cảm ơn charis

Trả lời

11

Cú pháp bạn đang sử dụng là để chèn nhiều bản ghi. Điều này sẽ chèn 4 bản ghi, mỗi bản ghi với một trường.

.values(node.getParentid()) 
.values(node.getName()) 
.values(node.getRem()) 
.values(node.getUipos()) 

Nhưng bạn tuyên bố 4 lĩnh vực, do đó sẽ không làm việc:

Result<TblcategoryRecord> result = create 
    .insertInto(Tblcategory.TBLCATEGORY, 
    Tblcategory.PARENT_ID, Tblcategory.NAME, Tblcategory.REM, Tblcategory.UIPOS) 
    .values(node.getParentid(), node.getName(), node.getRem(), node.getUipos()) 
    .returning(Tblcategory.CATEGORY_ID) 
    .fetch(); 

Hoặc cách khác::

Result<TblcategoryRecord> result = create 
    .insertInto(Tblcategory.TBLCATEGORY) 
    .set(Tblcategory.PARENT_ID, node.getParentid()) 
    .set(Tblcategory.NAME, node.getName()) 
    .set(Tblcategory.REM, node.getRem()) 
    .set(Tblcategory.UIPOS, node.getUipos()) 
    .returning(Tblcategory.CATEGORY_ID) 
    .fetch(); 

create.insertInto(Tblcategory.TBLCATEGORY, 
    Tblcategory.PARENT_ID, Tblcategory.NAME, Tblcategory.REM, Tblcategory.UIPOS) 

Những gì bạn có thể muốn làm điều này là

Có thể, bạn thậm chí khấm khá hơn bằng cách sử dụng

TblcategoryRecord result = 
    // [...] 
    .fetchOne(); 

Để biết thêm chi tiết, hãy xem xét hướng dẫn:

http://www.jooq.org/doc/2.6/manual/sql-building/sql-statements/insert-statement/

Hoặc Javadoc để tạo INSERT câu lệnh trả về giá trị:

http://www.jooq.org/javadoc/latest/org/jooq/InsertReturningStep.html

+0

cảm ơn, bổ sung giải pháp ưa thích, nhưng Eclipse vẫn cần đúc – Charis997

+0

@ Charis997: Người ta thường không được khuyến khích đặt câu trả lời trong câu hỏi trên Stack Overflow. Sẽ rất khó cho những vị khách tiếp theo hiểu được những gì đang xảy ra. Thay vào đó, bạn có thể "chấp nhận" câu trả lời này hoặc tự cung cấp câu trả lời, nếu câu trả lời này chưa đủ rõ ràng –

+0

@ Charis997: Về việc truyền: Bạn nói đúng. Điều đó sẽ không còn cần thiết nữa với jOOQ 2.0. Nhưng nó vẫn cần thiết với jOOQ 1.6.9 –

3

SOLUTION nghỉ

try { 
    TblcategoryRecord record = (TblcategoryRecord) create 
     .insertInto(Tblcategory.TBLCATEGORY) 
     .set(Tblcategory.PARENT_ID, node.getParentid()) 
     .set(Tblcategory.NAME, node.getName()) 
     .set(Tblcategory.REM, node.getRem()) 
     .set(Tblcategory.UIPOS, node.getUipos()) 
     .returning(Tblcategory.CATEGORY_ID) 
     .fetchOne(); 

     node.setId(record.getCategoryId()); 

    } catch (SQLException e1) { } 
+4

Bạn thực sự không nên bỏ qua SQLException đó! Nếu đó chỉ là một ví dụ, bạn có thể bỏ toàn bộ khối try/catch ra khỏi nó. –

0

Hãy thử

YoutableRecord result = create 
.insertInto(YOURTABLE) 
.set(YOURTABLE.PROD_NAME, "VAL") 
.returning(YOURTABLE.ID_PR) 
.fetchOne(); 


int id = result.getValue(Products.PRODUCTS.ID_PR); 
Các vấn đề liên quan