2011-11-14 16 views
6

Zainstalowałem jOOQ w środowisku Eclipse, wygenerowałem klasy dla mojego mySQL, ale nadal mam problemy z pisaniem kilku podstawowych zapytań.jOOQ wstaw zapytanie z zwracanymi wygenerowanymi kluczami

Próbowałam komponować INSERT z powrotem wygenerowanych kluczy, ale kompilator wyrzuca error

tabeli: tblCategory Kolumny: category_id, parent_id, nazwa, 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(); 

próbowali również inne differnt sposoby jak to zrobić we właściwy sposób?

dzięki charis

Odpowiedz

11

Składnia używasz jest do wstawiania wielu rekordów. To wstawi 4 rekordy, każdy z jednym polem.

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

Ale ogłoszony 4 pola, tak że nie będzie działać:

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

Co prawdopodobnie chcesz zrobić to w ten sposób:

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(); 

Lub alternatywnie:

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(); 

Prawdopodobnie jesteś nawet lepiej za pomocą

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

Aby uzyskać więcej informacji, należy rozważyć instrukcję:

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

Albo Javadoc tworzenia INSERT oświadczenia, które zwracają wartości:

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

+0

dzięki dodał preferowane rozwiązanie, ale nadal potrzebuje Eclipse odlewania – Charis997

+0

@ Charis997: To nie jest zwykle zaleca się umieścić w odpowiedzi pytania na przepełnienie stosu. Późniejszym użytkownikom trudno będzie zrozumieć, co się dzieje. Zamiast tego możesz "zaakceptować" tę odpowiedź lub udzielić odpowiedzi samodzielnie, jeśli ta nie jest wystarczająco jasna. –

+0

@ Charis997: O castingu: Masz rację. Nie będzie to już konieczne z programem jOOQ 2.0. Ale nadal jest potrzebny z jOOQ 1.6.9 –

3

Preferowany ROZWIĄZANIA

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

Naprawdę nie powinieneś ignorować tego wyjątku SQLException! Jeśli jest to tylko przykład, możesz zostawić cały blok try/catch. –

0

Spróbuj

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


int id = result.getValue(Products.PRODUCTS.ID_PR); 
Powiązane problemy