2011-11-14 20 views
6

私はeclipseにjOOQをインストールしました。私のmySQL用のクラスを生成しましたが、基本的なクエリを書くのにまだ問題があります。生成されたキーを返すjOOQの挿入クエリ

私は、生成されたキーの返却とINSERTクエリを構成しようとしましたが、コンパイラはエラー

表スロー:tblCategory 列を:CATEGORY_ID、PARENT_ID、名前、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(); 

もdiffernt他の試してみました方法 それは正しい方法を行うには?あなたが使用している

おかげ カリス

答えて

11

構文は、複数のレコードを挿入するためのものです。これは4つのレコードを挿入し、それぞれに1つのフィールドを挿入します。

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

しかし、それは仕事に行くのではないですので、あなたは、4つのフィールドを宣言した:

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

または代わりに::

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) 

はこれです

おそらく、あなたは

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

+0

を試してみてくださいおかげで、好ましい解決策を追加しましたが、EclipseはまだCharis997 @ – Charis997

+0

のキャスティング必要があります。通常、スタックオーバーフローの質問に答えを置くことをお勧めしません。その後の訪問者が何が起こっているのかを理解することは難しいでしょう。代わりに、あなたはこの答えを "受け入れる"ことができます。もしこれが明確でない場合は、自分で答えを提供してください。 –

+0

@ Charis997:キャスティングについて:そうです。それはjOOQ 2.0ではもう必要ありません。しかしそれはまだjOOQ 1.6.9で必要です –

3

兼ね備えSOLUTION:値を返すINSERT文を作成するための

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

かのJavadoc:詳細については

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

を使用して方が良い、マニュアルを検討

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

を楽しみにしているあなたは本当にそのSQLExceptionを無視すべきではありません!単なる例であれば、try/catchブロック全体をそのまま残すことができます。 –

0

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


int id = result.getValue(Products.PRODUCTS.ID_PR); 
関連する問題