From 441fd4c7a4e88b9c2ab2acbb967e3cbbae987295 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Sat, 17 Sep 2011 16:51:03 +0000 Subject: [PATCH] Added some sections to the manual --- jOOQ-website/css/jooq.css | 51 +- jOOQ-website/frame.php | 82 +-- jOOQ-website/img/joox-small.png | Bin 11022 -> 13366 bytes jOOQ-website/img/logo.png | Bin 34015 -> 43258 bytes jOOQ-website/manual/DSL/ALIAS/index.php | 2 +- jOOQ-website/manual/DSL/ARITHMETIC/index.php | 2 +- jOOQ-website/manual/DSL/CASE/index.php | 2 +- jOOQ-website/manual/DSL/CAST/index.php | 2 +- jOOQ-website/manual/DSL/CONDITION/index.php | 2 +- jOOQ-website/manual/DSL/EXISTS/index.php | 2 +- jOOQ-website/manual/DSL/FUNCTIONS/index.php | 2 +- jOOQ-website/manual/DSL/IN/index.php | 2 +- jOOQ-website/manual/DSL/NESTED/index.php | 2 +- jOOQ-website/manual/DSL/PROCEDURES/index.php | 2 +- jOOQ-website/manual/DSL/SELECT/index.php | 2 +- jOOQ-website/manual/DSL/SQL/index.php | 2 +- jOOQ-website/manual/DSL/UNION/index.php | 2 +- jOOQ-website/manual/DSL/index.php | 4 +- jOOQ-website/manual/JOOQ/Query/index.php | 489 +++++++++++++++++- .../manual/JOOQ/ResultQuery/index.php | 2 +- jOOQ-website/manual/JOOQ/Table/index.php | 2 +- .../manual/JOOQ/UpdatableRecord/index.php | 79 ++- jOOQ-website/manual/JOOQ/index.php | 4 +- jOOQ-website/manual/META/SEQUENCE/index.php | 2 +- jOOQ-website/manual/index.php | 6 +- .../src/main/resources/html-pages.xsl | 10 + jOOQ-website/src/main/resources/manual.xml | 489 +++++++++++++++++- 27 files changed, 1162 insertions(+), 84 deletions(-) diff --git a/jOOQ-website/css/jooq.css b/jOOQ-website/css/jooq.css index 5238837efa..309c7d1b3e 100644 --- a/jOOQ-website/css/jooq.css +++ b/jOOQ-website/css/jooq.css @@ -1,5 +1,5 @@ body { - font-family: Verdana,Geneva,Arial,Helvetica,sans-serif; + font-family: 'Lucida Grande',Helvetica,Arial,sans-serif;; font-weight: normal; text-shadow: 0 1px 0 #FFFFFF; font-size: 15px; @@ -33,19 +33,19 @@ h1, h2, h3, h4, h5, h6 { h1 { font-size: 4em; - text-shadow: 0 1px 1px #666666; + text-shadow: 0 1px 1px #444; padding: 0; margin: 0; } h2 { font-size: 2.5em; - text-shadow: 0 1px 1px #666666; + text-shadow: 0 1px 1px #444; } h3 { font-size: 1.3em; - text-shadow: 0 1px 0 #666666; + text-shadow: 0 1px 0 #444; } pre { @@ -72,7 +72,7 @@ p { p.slogan { padding-left: 2em; - color: #888888; + color: #444; font-family: 'Georgia',Serif; font-style: italic; height: 2.5em; @@ -129,19 +129,50 @@ a:hover { background-color: #FFFFFF; margin: 0 auto; position: relative; - width: 980px; + width: 1050px; - padding-top: 1em; - padding-left: 3em; - padding-right: 3em; border-width: 0; border-style: solid; border-color: #882222; - box-shadow: 0 0 20px #aa6633; + box-shadow: 0 0 30px #aa6633; +} + +#content { + padding-top: 1em; + padding-left: 3em; + padding-right: 3em; + + background: #fadccb; + background: -webkit-gradient(linear, left, right, from(#f6cab9), to(#ffeedd)); + background: -moz-linear-gradient(left, #f6cab9, #ffeedd); + background: gradient(linear, left, right, from(#f6cab9), to(#ffeedd)); + } #navigation { + padding-top: 1em; + padding-left: 3em; + padding-right: 3em; + height: 40px; + background: #444; + background: -webkit-gradient(linear, left top, left bottom, from(#555), to(#333)); + background: -moz-linear-gradient(top, #555, #333); + background: gradient(linear, left top, left bottom, from(#555), to(#333)); +} + +#navigation a, +#navigation a:link, +#navigation a:visited, +#navigation a:hover, +#navigation a:active { + color: #ddcccc; + text-decoration: none; + text-shadow: 0 1px 1px #666666; +} + +#navigation a:hover { + text-decoration: underline; } div.navigation-item-left { diff --git a/jOOQ-website/frame.php b/jOOQ-website/frame.php index 45c8fbfad7..e2f2d725a9 100644 --- a/jOOQ-website/frame.php +++ b/jOOQ-website/frame.php @@ -13,25 +13,6 @@
-
-
- -
-
- -
-
-
- -
-
-
- - - - - -
-

jOOQ Logo
- - ' . $slogan . '

'; - } - - printContent(); - ?> - -
-
+
+
+
+ +
+
+ +
+
+
+ +
+
+
+ + + + + +
+

jOOQ Logo
+ + ' . $slogan . '

'; + } + + printContent(); + ?> + +
+
+
diff --git a/jOOQ-website/img/joox-small.png b/jOOQ-website/img/joox-small.png index 732bd28df3cba3f72666f5c0bb1ce1e3dd00efe0..aa255723e4249fa2e0b72fef5cf92ccf7084a198 100644 GIT binary patch literal 13366 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 M07*qoM6N<$g5vWH@&Et; literal 11022 zcmV+pEAiBcP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2ipk^ z76%6P-Vo3L03ZNKL_t(|+UMo4*`9s9Rm6g(1(CN)D8iC2x(lNYAm;GHj*P_Vw|MoIofo5XrQIX;N8Y=UGUN z0)W)Nhk)KQz6=IXv^M(bYg?Xw^s|^(s-ws$Cxv3Pi*VA_o4O;HHB&H&gf;V}uZ^=GM-bxcP(UmaQl%&W{AI z|6BjwgY&`}RxqfPQbLG&!WzSD$Z;Gusb_pp_QD;jtKIDe$)*_v=U#inun{eqbd}5o z5Jada`~O{_>mjJvp1k#exQ#X7XKA+|1v<=cQpmy^7%!# zj(m5;@|v6OJo%dYdL$B_);|jiW)P)bIS>}bEA*5xC1anTwxPP@v6p{$+NE7mQ{=Y{ z_b&kSu7rw5y$5gp@ZT>?KDqy?H~-_9Hhsxx`bFmoh+qs$g@A2+`c%nV|6E{M=KfDk zENq`qKhnQJxPLK5Gh^lasz06bS(Uf$j?q`0bY;l*Ii=+elCA}lVPgkn$%goK11A1{ zRFC1ecTq~D)bDQ%Yw#{#H?QBm`Tw2$W-u3TPrH8T6=AKB>g_?K2v`W=IVPuR z@ZBwE6n3_c&wgtAhT7jC%0G+IJFPbs0uNpP#Y@jjyzsn>Zg{Grv>Cs8KbcubidDOR zI`X4S9ynsi`5k|2SpO`b0TAJL{T^L3uk?XOE-E`iKEj`EVwA+4lz7VBeorHJaxDy8r?lHXU z3q@-j(j7$`D>EV)UHaz-LTb0u4}{UoymnE=`MqAd?#?sMzBP{s|08m_ zAr=uBSGAqo{e&jBz1i=_EZaToWk3RZJZwKw)Zp=(X1x9Md?{qo^9!2gjbC_4Wq%KdQ)VsA}*X6lFERboxjPgMKG62Sl>W1gJH{DafgPZjy|zuNTnnD0KAenT(} zX2L-?puUgf1%kE^b+J8TOfuotyWBrk4?8f#F zH+6vTn%mEQbMsm!UvxAaikq16`SK(G^ZK{L?VxN(*lYEY9YrfWAX1BM61GK=G|71x zS-Ti#tMRRJ+F0} zyph)(mz|exg_C)Z z-8?e5@x&?X)>l6H>CpU^L-f8Q-ps6Q@x*o0UU^}X0SvT@sE-mWR1c+U(UE=)RvgJOoPJMMwuYYa$uDl#uB_aW2gsrsnOf_lS4N{3+g{o>G zodI4rbK5s_w%_=`utqHeGapRjlo)K;>hHI{^Z8pVx9_O&5f3Av1Pl0SCNqhIfnSD2 z6_tUDhp!(r@UZ75UEsMMQ3`7?LkW51QLipsu$7@b#3RT{piChmk)4K6o}FIfl|Fgv zbhyC_|I+#BVTDsa*^)$!1DC;I9YlERy3$si8t=Q0-+o=Z@w=!GvS0@hj-%A`>{maz zNLgaHxh_YK9^DW+dyc;TqzQvg?s?i3dBI4%sySGEwk&!1aZijJHzyWz2|_~Fq9ikr z)1pOp6<}%WXrjmm1rRatS8iIh^waXe=X6!JAR=Rso*ubnwm{8lac)_GJ61FoptGHdp0o>%L@^y=Gb%-qX}Fn`*bD~G*g z62WS&un@}0$(UXKmwnvls=4LY4t%HBUCIb2P%SC+)}$Ny4Q{)~u@MdFdG!wc+4xO| zAKkI@krs##DxH-jzIfQ>Q)sm-#i@YX+a+E}TVR9K0wEGjCi}an}_S(vfc=Ght#UcN^8bQ!n5DfkTwC z-I=*@PR9#|Jep~z3$Q}yqn9?UnpyJr;~y!C0I+6lu=3E?xOOnWA8G?2*U319U=f)bE`Ie8fCVSuszg#H?=4g zNNC@^(Mw-msv)8%ef`-l!FzC9+@!hll8M`$EiNc8H~+nb|F2Pt$i64K*l+A{;#(`r z;v0tF*vt-^owWc5$8ctjN1drtmO3a?h@`1dn=VHhvsXz~pAODyR@fouNQtyc6uEGc z@Ew=|?ao)0O+<`6oSyo`wu6ldy9@~RA@ke*fr?#~w`q~3?ce7)O zXxh80H*A~D&;@qk*cpGwYZk7*nF9funT?NE-uQgT+5LMQo3?XW(EdX?KPaSYphbsJ z#J+a$^BM^W5vJVZhg`+X)Br!*ce!Wpld_PNj%E&aWTGHHP|&^W;M5(^-p|#VTea)~ z(l#*n88tuOj{YQ_a=8NoE~eNdwyzWHN<1Kl{NeQ+V!(^Agw_&AT=agSC`NKc7uncjjY0~c9u#* zgQrh0k~6UHrMXB?LvAIu_3CsIqd_*PvcmaU1wOna>sgeqc zNbV}-A072Ml-5YRIdxRW-ud;W-hpRWh-luF^*xSg+xyr8WA+~iP5tDu89Vw%9=YSv zaaRw0|6iAFv_qmH0U&0c@WyNpFz|rDQN7RqN#>0)+^n#B+=_*el_j!Tx9qpK(BqF| zQmtAJG|&+W{O5&lca7P1Ju3g)3;P67aN|{v)`wE(f4yex+h0}toB#Uo#k~f#YIxXM z>?0fs;Jq<(FZ|27gzf`c3{bKue>qlFH2IDUHcv(p=jcS zMG7*E=1tSuhSD>3J%fLESG&EYx@rucciP`OH|{fZ&{e$mu%9u;cM|o5Xaq=>0+Cv- zTr<1eP5Phmep03hyYxe*Lru) zYA3|s2kGmCsooW9&vTo%>KhE@?3OCrg?DDl@~>CSnOx@?30k*!(wa5XDzU{yvb-i) zUF;4BWT=ade+Gh#y||XC!Bd=%Q!E^pKPUuP9wJ zeZw2=yBys%qZh+BD0|`IFZ$%%5-rEL;tx$XA4T`#$Mxc%PXN{`~!= zb|3>Fjbv7&us(fPXSXoVnDWfZHS;KB8N))*hN3yIPQ9&Bht4VxVrJIP+mo*kaN3bW zMhdC+AgP!)Ect5n`gzBncrz(m2->uE?#e~8&L8$vi^AS{;YL2ZO4{_!gb)8S^OhN9 z_oZit>PP66iKDjhs^P<&ohSJB?F;)uGLqb6mMNJYtpl>#RG@@AuXI; z9o_cLyw`)F(9tK3w5{~&Xz{A(H#JzRIrQWUH+Jb=xSLF9+9vb3frkks0zvnp>rUKN zss4n}!rtccj8E4VT^5qVyIyUY1_*)}<&rn_T zY7bN(qS|t|czcb_CWhjUIRgveiU~h|`+SIO)L|U#!qEd%)lhl<5IP0_+o|=JYO#jsZc~ zx}qxRWI_;`fThyFhFNc~*ic-uyu5f_zrN>ZXXKad*j!$*Y0m0#t#W&{YkTy@jf*yv z&R$owC<9rY+YDZ|ar%-qQ3j?p1Y#Y9D;%)+YB4nMX%5=qNz+`OP& z$6&apO{^hBpfI4qgx+hGZJRZFegai%R&G8Ky?>Ar^z~T-|DK5~&-Rs@cf+|ajhS}c z0mx{zM>>11Su~@xpfHpQqW`33G=q4+Nu9s|`I1Dk(x3j}+V`H^bjpYxN1dIQ-Ab{k zGs%g;1gR}R$4#w(+)}#iiz!c3))eo+)+}ma!TS8`r*cG^8%hW(*sP#1l#wiUrleE-2Q736m38cJ&}4?AX*Q^S6eL7dxKLPHxE4Xwcjn!&q7PImhDkkNT7 zW^ZN$n-wHqw&5h76Mo6M&jZ z-Yp1KFA!pt$+fH2b?etjLW0N-ClW|7>~QApfZTn`yQ)ZL3c428e z`U5kD!9fF`JOBcbzPeV@~u$7Xz97ibEWS|?MtnN(PRva0fB5A zW5@CEzz1D5qA}s~Sfy6uka?H|2+kBM!a1_EZQ>~5M z=59#DoVqMG0R+237*ZCLg^U1&YATXar7qBrP!uhivC>Tj&p!1u%Tgt)D(VfpeaO)2 z(y9u-?1Z6%D|S?rmqdxUG*;%rO+&C<*CzGnj=uIkl{HZVy6f=~^$TR$_i8k-clRK| zi?+s$mJ}X8L?tCfEhDz9s#rNIY9Y(P_FAlA zIDmFMXW4?S->)oU2v0;p#*)e)DOhb@zu69;A%;#0Q!7gen1If-WMK2slJDgv@3qb- z?j}6=`Gsi+=$dFP8(p-0YdX^N>?|uNQ^)w8e)XmCHso+{(V6f@$D}T@xTIV z#_|O(+%vm@1x;elT>unBC?{pl*3p`Y!5{-pbt45Yv#Ha4-hQ`!y=V!Jr{;-Nu!| zq{Rcfl+Dpz)l^zmS_qNl^Vd2tPb#ryQBjp!3P|7eiR%D4{qXzANi$Gaj5>AKU=}kv z^lE&`r9&bph@;}44^DXCk000bW*>-)J;Ka@gzdyMh*JU=sBqJp^s4h(hIg$6*ju+7H_1;Ahv&~<7|u#-)I59E+&N%jU^8nR>`eMJ8zI&F@1ms1s zq`Q+;1TYioCOZU#0TTld3>H6NG!uy72N?__z^*xVShol6y1)Yn@>!Y44I*OTPMbYP+0>9IHoz*Njyv+0Z&!WmTG7J}>xrF8a&O&c=FFV% z5gqy$qqt3voJho4Ja1V50SC!}Cv*W2El=EV?yEkkYq8~zHxAuX02ysM6`VHsa0Yv* z@lpB2W8+2*|95J=``*-p*mDPnSW+Tk*SXGyxjwr>;GHR^I_$xq?}at(bo{h}4!~IC z5-$GZv6r8IRvb|cF95vv+#(%kL!7#ZG$`zqmXW6mWakjl7jIq=uXY+1E+hjUcJi>+ z8J*8NQ7ViXG@lc5Ftcix#ar0czF7H``%%(8z*TbAtJv(dKVs_#7* zLjagqdL&F8%F0Xi^n1}l28Qayw-Ia<{1DiJYw_(5pWU~~aSYdi^YyaHF?Y2+^;UmQT)ktDiJ?6+S}JkE+1Ezbj>& zFhfXbG!qD7Ka8$trS{l!Fm=YP0J1dmE!Uni{^_}&PMjMNSy`rW7&(Kw^vlQ!?`gn@ zh=iaEuO95cG0+;G564GM(iC5D`qQrCH;B=xw9u+Wl{<>IDPJ&=kw!}}SZIH<0h3Wa8RB{oD>V5wv}HVx2c6Zlf44qK)TAS0{A=?QWhM|KCJt8# z8Ar8Zf3}6DtlL$^;HKV3F-q4aTA*fMd zVEu;8OvZ8uzGcNEd6EnX4JML43B$n}VI;sTG)a%7PAzAJFc5(BK@8=Sl>mc;AxhKN z|7mC(j)2;hSU2_Ed5RIJ)zB%0DsH^Hr;lV6wi48g@<|K7UMdwed^rgbJ#x=KuNZmj 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 IM6N<$f(?&hwg3PC diff --git a/jOOQ-website/img/logo.png b/jOOQ-website/img/logo.png index 469bec4463866c2bf3d45dda6d98bf63babc0b5a..3c4dfe1eb8835fbcee48a443cfa53ab7d155f790 100644 GIT binary patch literal 43258 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 b008)Z2LZ*^8uPCZ00000NkvXXu0mjf)XBIk diff --git a/jOOQ-website/manual/DSL/ALIAS/index.php b/jOOQ-website/manual/DSL/ALIAS/index.php index 13dfce7909..aafb3d88e4 100644 --- a/jOOQ-website/manual/DSL/ALIAS/index.php +++ b/jOOQ-website/manual/DSL/ALIAS/index.php @@ -14,7 +14,7 @@ function printContent() { ?> - +
The jOOQ User Manual : DSL or fluent API : Aliased tables and fieldsprevious : nextThe jOOQ User Manual : DSL or fluent API. Where SQL meets Java : Aliased tables and fieldsprevious : next
- +
The jOOQ User Manual : DSL or fluent API : Arithmetic operationsprevious : nextThe jOOQ User Manual : DSL or fluent API. Where SQL meets Java : Arithmetic operationsprevious : next
- +
The jOOQ User Manual : DSL or fluent API : The CASE clauseprevious : nextThe jOOQ User Manual : DSL or fluent API. Where SQL meets Java : The CASE clauseprevious : next
- +
The jOOQ User Manual : DSL or fluent API : Type castingprevious : nextThe jOOQ User Manual : DSL or fluent API. Where SQL meets Java : Type castingprevious : next
- +
The jOOQ User Manual : DSL or fluent API : Conditionsprevious : nextThe jOOQ User Manual : DSL or fluent API. Where SQL meets Java : Conditionsprevious : next
- +
The jOOQ User Manual : DSL or fluent API : Nested select statements using the EXISTS operatorprevious : nextThe jOOQ User Manual : DSL or fluent API. Where SQL meets Java : Nested select statements using the EXISTS operatorprevious : next
- +
The jOOQ User Manual : DSL or fluent API : Functions, aggregate operators, and window functionsprevious : nextThe jOOQ User Manual : DSL or fluent API. Where SQL meets Java : Functions, aggregate operators, and window functionsprevious : next
- +
The jOOQ User Manual : DSL or fluent API : Nested select statements using the IN operatorprevious : nextThe jOOQ User Manual : DSL or fluent API. Where SQL meets Java : Nested select statements using the IN operatorprevious : next
- +
The jOOQ User Manual : DSL or fluent API : Other types of nested selectsprevious : nextThe jOOQ User Manual : DSL or fluent API. Where SQL meets Java : Other types of nested selectsprevious : next
- +
The jOOQ User Manual : DSL or fluent API : Stored procedures and functionsprevious : nextThe jOOQ User Manual : DSL or fluent API. Where SQL meets Java : Stored procedures and functionsprevious : next
- +
The jOOQ User Manual : DSL or fluent API : Complete SELECT syntaxprevious : nextThe jOOQ User Manual : DSL or fluent API. Where SQL meets Java : Complete SELECT syntaxprevious : next
- +
The jOOQ User Manual : DSL or fluent API : When it's just much easier: Plain SQLprevious : nextThe jOOQ User Manual : DSL or fluent API. Where SQL meets Java : When it's just much easier: Plain SQLprevious : next
- +
The jOOQ User Manual : DSL or fluent API : UNION and other set operationsprevious : nextThe jOOQ User Manual : DSL or fluent API. Where SQL meets Java : UNION and other set operationsprevious : next
- +
The jOOQ User Manual : DSL or fluent APIprevious : nextThe jOOQ User Manual : DSL or fluent API. Where SQL meets Javaprevious : next

Table of contents

  1. diff --git a/jOOQ-website/manual/JOOQ/Query/index.php b/jOOQ-website/manual/JOOQ/Query/index.php index 33a026b1b4..442efb6f52 100644 --- a/jOOQ-website/manual/JOOQ/Query/index.php +++ b/jOOQ-website/manual/JOOQ/Query/index.php @@ -4,20 +4,499 @@ // Please do not edit this content manually require '../../../frame.php'; function printH1() { - print "Query and its subtypes"; + print "The Query and its various subtypes"; } function getSlogan() { - return ""; + return " + The Query type hierarchy is what you use to execute queries. It has the + following subtypes for each kind of operation + "; } function printContent() { global $root; ?> - + -
    The jOOQ User Manual : jOOQ classes and their usage : Query and its subtypesprevious : nextThe jOOQ User Manual : jOOQ classes and their usage : The Query and its various subtypesprevious : next
    + +

    SELECT statements

    +

    + There are essentially two ways of creating SELECT statements in jOOQ. + For historical reasons, you can create + org.jooq.SimpleSelectQuery or + org.jooq.SelectQuery + objects and add additional query clauses, such as + Conditions or + SortFields to it. + Since jOOQ 1.3, there is also the possibility to + create SELECT statements using jOOQ's + DSL API in a much more intuitive + and SQL-like way. +

    +

    Use the DSL API when:

    +
      + +
    • You want your code to look like SQL
    • + +
    • You want your IDE to help you with auto-completion (you will not be able to write select .. order by .. where .. join or any of that stuff)
    • + +
    +

    Use the regular API when:

    +
      + +
    • You want to create your query step-by-step, creating query parts one-by-one
    • + +
    • You need to assemble your query from various places, passing the query around, adding new conditions and joins on the way
    • + +
    +

    In any case, all API's will construct the same underlying + implementation object, and in many cases, you can combine the two + approaches. Let's check out the various SELECT statement types:

    + +
      + +
    • +org.jooq.Select: + This Query subtype stands for a general type of SELECT statement. + It is also the main Select type for the + DSL API. When executed, this object + will hold a Result containing the resulting Records. + This type is further subtyped for the various uses of a SELECT statement as such:
    • + +
    • +org.jooq.SimpleSelectQuery: + This Query will allow for selecting from single physical Tables only. + It therefore has access to the Table's generic type parameter + <R extends Record> and will provide a matching Result<R>. + This is especially useful if <R> is a subtype of + UpdatableRecord. + Then you will be able to perform updates on your result set immediately.
    • + +
    • +org.jooq.SelectQuery: + This Query will allow for selecting a subset of Fields from several + Tables. Because the results of such a query are considered of an anonymous + or ad-hoc type, this Query will bind <R> to the general type Record + itself. The purpose of this Query type is to allow for full SQL support, + including SELECT, JOIN and GROUP BY clauses.
    • + +
    + +

    Example: SQL query and DSL query

    + + + + + + + + + + + + + + + + +
    A sample SQL statement...and its equivalent in jOOQ's DSL API
    +
    +-- Select all books by authors born after 1920, named "Paulo" 
    +-- from a catalogue consisting of authors and books:
    +
    +
    +SELECT * 
    +  FROM t_author a 
    +  JOIN t_book b 
    +    ON a.id = b.author_id 
    + WHERE a.year_of_birth > 1920 
    +   AND a.first_name = 'Paulo'
    + ORDER BY b.title
    +
    +
    +// Instanciate your factory using a JDBC connection.
    +Factory create = new Factory(connection, SQLDialect.ORACLE);
    +
    +// Execute the query "on a single line"
    +Result<Record> result = create.select()
    +    .from(T_AUTHOR)
    +    .join(T_BOOK)
    +    .on(ID.equal(AUTHOR_ID))
    +    .where(YEAR_OF_BIRTH.greaterThan(1920)
    +    .and(FIRST_NAME.equal("Paulo")))
    +    .orderBy(TITLE).fetch();
    +
    + +

    + In the above example, some generated artefacts are used for querying. + In this case, T_AUTHOR and T_BOOK are instances of types + TAuthor and + TBook respectively. + Their full qualification would read TAuthor.T_AUTHOR and TBook.T_BOOK, but in many cases, + it's useful to static import elements involved with queries, in order to decrease verbosity. +

    + +

    + Apart from the singleton Table instances TAuthor.T_AUTHOR and + TBook.T_BOOK, these generated classes also contain one static member + for every physical field, such as TAuthor.ID or TBook.TAUTHOR_ID, etc. +

    + +
      + +
    • For more information about code generation, check out the manual's section about + Meta model source code generation.
    • + +
    • For more DSL examples, please consider the manual's section about the + DSL API.
    • + +
    + +

    Example: Non-DSL query

    +

    + If you choose not to use the DSL API (for instance, because you don't + want to add Query parts in the order SQL expects them), you can use + this syntax: +

    +
    +// Re-use the factory to create a SelectQuery. This example will not make use of static imports...
    +SelectQuery q = create.selectQuery();
    +q.addFrom(TAuthor.T_AUTHOR);
    +
    +// This example shows some "mixed" API usage, where the JOIN is added with the standard API, and the 
    +// Condition is created using the DSL API
    +q.addJoin(TBook.T_BOOK, TAuthor.ID.equal(TBook.AUTHOR_ID));
    +
    +// The AND operator between Conditions is implicit here
    +q.addConditions(TAuthor.YEAR_OF_BIRTH.greaterThan(1920));
    +q.addConditions(TAuthor.FIRST_NAME.equal("Paulo"));
    +q.addOrderBy(TBook.TITLE);
    + +

    Fetching data

    +

    + The org.jooq.Select interface extends + org.jooq.ResultQuery, + which provides a range of methods to fetch data from the database. + Once you have constructed your SELECT query (see examples above), you + may choose to either simply execute() it, or use a variety of convenience + fetchXXX() methods. +

    +

    + See the manual's + section on the ResultQuery + for more details. +

    + + +

    INSERT Statements

    +

    jOOQ supports two modes for INSERT statements. + The INSERT VALUES and the INSERT SELECT syntax

    + +

    Example: SQL query and DSL query

    + + + + + + + + + + + + + + + + +
    A typical INSERT query looks like this...and how it's done with jOOQ
    +
    +INSERT INTO T_AUTHOR 
    +    (ID, FIRST_NAME, LAST_NAME)
    +VALUES 
    +    (100, 'Hermann', 'Hesse'),
    +    (101, 'Alfred', 'Döblin');
    + +
    +
    +create.insertInto(T_AUTHOR, 
    +          TAuthor.ID, TAuthor.FIRST_NAME, TAuthor.LAST_NAME)
    +      .values(100, "Hermann", "Hesse")
    +      .values(101, "Alfred", "Döblin")
    +      .execute();
    +
    + +

    The DSL syntax tries to stay close to actual SQL. In detail, + however, Java is limited in its possibilities. That's why the + .values() clause is repeated for every record. Some RDBMS support + inserting several records at the same time. This is also supported in + jOOQ, and simulated using INSERT INTO .. SELECT .. UNION ALL SELECT .. + clauses for those RDBMS that don't support this syntax. +

    +

    Note: Just like in SQL itself, you can have syntax errors when you + don't have matching numbers of fields/values. Also, you can run into + runtime problems, if your field/value types don't match.

    + +

    Example: DSL Query, alternative syntax

    +

    MySQL (and some other RDBMS) allow for using an UPDATE-like syntax + for INSERT statements. This is also supported in jOOQ, should you + prefer that syntax. The above INSERT statement can also be expressed + as follows:

    +
    +create.insertInto(T_AUTHOR)
    +      .set(TAuthor.ID, 100)
    +      .set(TAuthor.FIRST_NAME, "Hermann")
    +      .set(TAuthor.LAST_NAME, "Hesse")
    +      .newRecord()
    +      .set(TAuthor.ID, 101)
    +      .set(TAuthor.FIRST_NAME, "Alfred")
    +      .set(TAuthor.LAST_NAME, "Döblin")
    +      .execute();
    +

    As you can see, this syntax is a bit more verbose, but also more + type-safe, as every field can be matched with its value.

    + +

    Example: ON DUPLICATE KEY UPDATE clause

    +

    The MySQL database supports a very convenient way to INSERT or + UPDATE a record. This is a non-standard extension to the SQL syntax, + which is supported by jOOQ and simulated in other RDBMS, where this is + possible. Here is an example how to use the ON DUPLICATE KEY UPDATE + clause:

    +
    +// Add a new author called "Koontz" with ID 3.
    +// If that ID is already present, update the author's name
    +create.insertInto(T_AUTHOR, TAuthor.ID, TAuthor.LAST_NAME)
    +      .values(3, "Koontz")
    +      .onDuplicateKeyUpdate()
    +      .set(TAuthor.LAST_NAME, "Koontz")
    +      .execute();
    + +

    Example: INSERT .. RETURNING clause

    +

    The Postgres database has native support for an INSERT .. RETURNING + clause. This is a very powerful concept that is simulated for all + other dialects using JDBC's + getGeneratedKeys() + method. Take this example:

    + +
    +// Add another author, with a generated ID
    +Record<?> record =
    +create.insertInto(T_AUTHOR, TAuthor.FIRST_NAME, TAuthor.LAST_NAME)
    +      .values("Charlotte", "Roche")
    +      .returning(TAuthor.ID)
    +      .fetchOne();
    +
    +System.out.println(record.getValue(TAuthor.ID));
    +
    +// For some RDBMS, this also works when inserting several values
    +Result<?> result =
    +create.insertInto(T_AUTHOR, TAuthor.FIRST_NAME, TAuthor.LAST_NAME)
    +      .values("Johann Wolfgang", "von Goethe")
    +      .values("Friedrich", "Schiller")
    +      // You can request any field. Also trigger-generated values
    +      .returning(TAuthor.ID, TAuthor.CREATION_DATE)
    +      .fetch();
    + +

    Example: Non-DSL Query

    +

    You can always use the more verbose regular syntax of the InsertQuery, if you need more control:

    +
    +// Insert a new author into the T_AUTHOR table
    +InsertQuery<TAuthorRecord> i = create.insertQuery(T_AUTHOR);
    +i.addValue(TAuthor.ID, 100);
    +i.addValue(TAuthor.FIRST_NAME, "Hermann");
    +i.addValue(TAuthor.LAST_NAME, "Hesse");
    +
    +i.newRecord();
    +i.addValue(TAuthor.ID, 101);
    +i.addValue(TAuthor.FIRST_NAME, "Alfred");
    +i.addValue(TAuthor.LAST_NAME, "Döblin");
    +i.execute();
    + +

    Example: INSERT Query combined with SELECT statements

    +

    The InsertQuery.addValue() method is overloaded, such that you can + also provide a Field, potentially containing an expression:

    +
    +// Insert a new author into the T_AUTHOR table
    +InsertQuery<TAuthorRecord> i = create.insertQuery(T_AUTHOR);
    +i.addValue(TAuthor.ID, create.select(TAuthor.ID.max().add(1)).from(T_AUTHOR).asField())
    +i.addValue(TAuthor.FIRST_NAME, "Hermann");
    +i.addValue(TAuthor.LAST_NAME, "Hesse");
    +i.execute();
    +

    Note that especially MySQL (and some other RDBMS) has some + limitations regarding that syntax. You may not be able to + select from the same table you're inserting into

    + +

    Example: INSERT SELECT syntax support

    +

    In some occasions, you may prefer the INSERT SELECT syntax, for instance, when + you copy records from one table to another:

    +
    +Insert i = create.insertInto(T_AUTHOR_ARCHIVE,
    +           create.selectFrom(T_AUTHOR).where(TAuthor.DECEASED.equal(1)));
    +i.execute();
    + + +

    UPDATE Statements

    +

    UPDATE statements are only possible on single tables. Support for + multi-table updates will be implemented in the near future.

    + +

    Example: SQL query and DSL query

    + + + + + + + + + + + + + + + + +
    A typical UPDATE query looks like this...and how it's done with jOOQ
    +
    +
    +UPDATE T_AUTHOR
    +   SET FIRST_NAME = 'Hermann',
    +       LAST_NAME = 'Hesse'
    + WHERE ID = 3;
    + +
    +
    +create.update(T_AUTHOR)
    +      .set(TAuthor.FIRST_NAME, "Hermann")
    +      .set(TAuthor.LAST_NAME, "Hesse")
    +      .where(TAuthor.ID.equal(3))
    +      .execute();
    +
    + +

    Example: Non-DSL Query

    +

    Using the org.jooq.UpdateQuery class, + this is how you could express an UPDATE statement:

    +
    +UpdateQuery<TAuthorRecord> u = create.updateQuery(T_AUTHOR);
    +u.addValue(TAuthor.FIRST_NAME, "Hermann");
    +u.addValue(TAuthor.FIRST_NAME, "Hesse");
    +u.addConditions(TAuthor.ID.equal(3));
    +u.execute();
    + + +

    DELETE Statements

    +

    DELETE statements are only possible on single tables. Support for + multi-table deletes will be implemented in the near future.

    + +

    Example: SQL query and DSL query

    + + + + + + + + + + + + + + + + +
    A typical DELETE query looks like this...and how it's done with jOOQ
    +
    +
    +DELETE T_AUTHOR
    + WHERE ID = 100;
    + +
    +
    +create.delete(T_AUTHOR)
    +      .where(TAuthor.ID.equal(100))
    +      .execute();
    +
    + +

    Example: Non-DSL Query

    +

    Using the org.jooq.DeleteQuery class, + this is how you could express a DELETE statement:

    +
    +DeleteQuery<TAuthorRecord> d = create.deleteQuery(T_AUTHOR);
    +d.addConditions(TAuthor.ID.equal(100));
    +d.execute();
    + + +

    MERGE Statement

    +

    + The MERGE statement is one of the most advanced standardised SQL + constructs, which is supported by DB2, HSQLDB, Oracle, SQL Server and + Sybase (MySQL has the similar INSERT .. ON DUPLICATE KEY UPDATE + construct. H2's MERGE variant is currently not supported.) +

    +

    + The point of the standard MERGE statement is to take a TARGET table, and + merge (INSERT, UPDATE) data from a SOURCE table into it. DB2, Oracle, + SQL Server and Sybase also allow for DELETING some data and for adding + many additional clauses. Those non-standard extensions are currently + not supported. Here is an example: +

    + + + + + + + + + + +
    +
    +-- Check if there is already an author called 'Hitchcock'
    +-- If there is, rename him to John. If there isn't add him.
    +
    +MERGE INTO T_AUTHOR
    +USING (SELECT 1 FROM DUAL)
    +ON (LAST_NAME = 'Hitchcock')
    +WHEN MATCHED THEN UPDATE SET FIRST_NAME = 'John'
    +WHEN NOT MATCHED THEN INSERT (LAST_NAME) VALUES ('Hitchcock')
    + +
    +
    +create.mergeInto(T_AUTHOR)
    +      .using(create().selectOne())
    +      .on(TAuthor.LAST_NAME.equal("Hitchcock"))
    +      .whenMatchedThenUpdate()
    +      .set(TAuthor.FIRST_NAME, "John")
    +      .whenNotMatchedThenInsert(TAuthor.LAST_NAME)
    +      .values("Hitchcock")
    +      .execute();
    +
    + + +

    TRUNCATE Statement

    +

    + The syntax is trivial: +

    + + + + + + + + + +
    +
    TRUNCATE TABLE T_AUTHOR;
    + +
    +
    create.truncate(T_AUTHOR).execute();
    +
    +

    This is not supported by Ingres and SQLite. jOOQ will execute a DELETE FROM + T_AUTHOR statement instead.

    + - diff --git a/jOOQ-website/manual/JOOQ/ResultQuery/index.php b/jOOQ-website/manual/JOOQ/ResultQuery/index.php index c5b33a7fb3..e33b62f17a 100644 --- a/jOOQ-website/manual/JOOQ/ResultQuery/index.php +++ b/jOOQ-website/manual/JOOQ/ResultQuery/index.php @@ -14,7 +14,7 @@ function printContent() { ?> - +
    The jOOQ User Manual : jOOQ classes and their usage : ResultQuery and various ways of fetching dataprevious : nextThe jOOQ User Manual : jOOQ classes and their usage : ResultQuery and various ways of fetching dataprevious : next

    See some details about how to create these queries in the - Query section of the manual + Query section of the manual

    TableFields

    diff --git a/jOOQ-website/manual/JOOQ/UpdatableRecord/index.php b/jOOQ-website/manual/JOOQ/UpdatableRecord/index.php index bd207b97fa..64383fc944 100644 --- a/jOOQ-website/manual/JOOQ/UpdatableRecord/index.php +++ b/jOOQ-website/manual/JOOQ/UpdatableRecord/index.php @@ -7,17 +7,88 @@ function printH1() { print "Updatable Records"; } function getSlogan() { - return ""; + return " + UpdatableRecords are a specific subtype of TableRecord that have + primary key information associated with them. + "; } function printContent() { global $root; ?> - + -
    The jOOQ User Manual : jOOQ classes and their usage : Updatable Recordsprevious : nextThe jOOQ User Manual : jOOQ classes and their usage : Updatable Recordsprevious : next
    + +

    CRUD Operations

    +

    As of jOOQ 1.5, the UpdatableRecord essentially contains three additional + methods CRUD + (Create Read Update Delete) operations:

    +
    +// Store any changes made to this record to the database.
    +// The record executes an INSERT if the PRIMARY KEY is NULL or has been changed. Otherwise, an UPDATE is performed.
    +int store();
    +
    +// Deletes the record from the database.
    +int delete();
    +
    +// Reflects changes made in the database to this Record
    +void refresh();
    +

    An example lifecycle of a book can be implemented as such:

    +
    +// Create a new record and insert it into the database
    +TBookRecord book = create.newRecord(T_BOOK);
    +book.setTitle("My first book");
    +book.store();
    +
    +// Update it with new values
    +book.setPublishedIn(2010);
    +book.store();
    +
    +// Delete it
    +book.delete();
    +

    These operations are very simple utilities. They do not + reflect the functionality offered by Hibernate + or other persistence managers.

    + +

    Performing CRUD on non-updatable records

    +

    + If the jOOQ code-generator cannot detect any PRIMARY KEY, or UNIQUE KEY + on your tables, then the generated artefacts implement TableRecord, + instead of UpdatableRecord. A TableRecord can perform the same CRUD + operations as we have seen before, if you provide it with the necessary + key fields. The API looks like this: +

    + +
    +// INSERT or UPDATE the record using the provided keys
    +int storeUsing(TableField<R, ?>... keys)
    +
    +// DELETE a record using the provided keys
    +int deleteUsing(TableField<R, ?>... keys);
    +
    +// Reflects changes made in the database to this Record
    +void refreshUsing(TableField<R, ?>... keys);
    + +

    + This is useful if your RDBMS does not support referential constraints (e.g. MySQL's + MyISAM), or if you want to + store records to an unconstrained view. An example lifecycle of a book without + any keys can then be implemented as such: +

    +
    +// Create a new record and insert it into the database
    +TBookRecord book = create.newRecord(T_BOOK);
    +book.setTitle("My first book");
    +book.storeUsing(TBook.ID);
    +
    +// Update it with new values
    +book.setPublishedIn(2010);
    +book.storeUsing(TBook.ID);
    +
    +// Delete it
    +book.deleteUsing(TBook.ID);
    + - diff --git a/jOOQ-website/manual/JOOQ/index.php b/jOOQ-website/manual/JOOQ/index.php index e731cf7987..33f36370be 100644 --- a/jOOQ-website/manual/JOOQ/index.php +++ b/jOOQ-website/manual/JOOQ/index.php @@ -39,7 +39,7 @@ function printContent() {

    This section is about the main jOOQ classes and the global architecture. Most of the time, however, you will be using the - DSL or fluent API + DSL or fluent API. Where SQL meets Java in order to create queries the way you're used to in SQL

    @@ -60,7 +60,7 @@ function printContent() { Updatable Records
  2. -Query and its subtypes +The Query and its various subtypes
  3. ResultQuery and various ways of fetching data diff --git a/jOOQ-website/manual/META/SEQUENCE/index.php b/jOOQ-website/manual/META/SEQUENCE/index.php index 73e317652a..86d8a08f78 100644 --- a/jOOQ-website/manual/META/SEQUENCE/index.php +++ b/jOOQ-website/manual/META/SEQUENCE/index.php @@ -14,7 +14,7 @@ function printContent() { ?> - +
    The jOOQ User Manual : Meta model code generation : Sequencesprevious : nextThe jOOQ User Manual : Meta model code generation : Sequencesprevious : next
    -DSL or fluent API +DSL or fluent API. Where SQL meets Java

    See these chapters to learn about how to use jOOQ in every day's work. The @@ -99,7 +99,7 @@ function printContent() { Updatable Records

  4. -Query and its subtypes +The Query and its various subtypes
  5. ResultQuery and various ways of fetching data @@ -139,7 +139,7 @@ function printContent() {
  • -DSL or fluent API +DSL or fluent API. Where SQL meets Java
    1. Complete SELECT syntax diff --git a/jOOQ-website/src/main/resources/html-pages.xsl b/jOOQ-website/src/main/resources/html-pages.xsl index 6d4fd97421..7337576d06 100644 --- a/jOOQ-website/src/main/resources/html-pages.xsl +++ b/jOOQ-website/src/main/resources/html-pages.xsl @@ -187,6 +187,7 @@ function printContent() { + @@ -196,16 +197,25 @@ function printContent() { + + https://github.com/lukaseder/jOOQ/blob/master/jOOQ-test/src/ + + .java + + + https://github.com/lukaseder/jOOQ/blob/master/jOOQ/src/main/java/ .java + http://download.oracle.com/javase/6/docs/api/ .html + diff --git a/jOOQ-website/src/main/resources/manual.xml b/jOOQ-website/src/main/resources/manual.xml index fe46b2661f..ab1a4f2e59 100644 --- a/jOOQ-website/src/main/resources/manual.xml +++ b/jOOQ-website/src/main/resources/manual.xml @@ -478,10 +478,495 @@ BigDecimal getValueAsBigDecimal(int fieldIndex);
      Updatable Records + + UpdatableRecords are a specific subtype of TableRecord that have + primary key information associated with them. + + +

      CRUD Operations

      +

      As of jOOQ 1.5, the UpdatableRecord essentially contains three additional + methods CRUD + (Create Read Update Delete) operations:

      +
      +// Store any changes made to this record to the database.
      +// The record executes an INSERT if the PRIMARY KEY is NULL or has been changed. Otherwise, an UPDATE is performed.
      +int store();
      +
      +// Deletes the record from the database.
      +int delete();
      +
      +// Reflects changes made in the database to this Record
      +void refresh();
      +

      An example lifecycle of a book can be implemented as such:

      +
      +// Create a new record and insert it into the database
      +TBookRecord book = create.newRecord(T_BOOK);
      +book.setTitle("My first book");
      +book.store();
      +
      +// Update it with new values
      +book.setPublishedIn(2010);
      +book.store();
      +
      +// Delete it
      +book.delete();
      +

      These operations are very simple utilities. They do not + reflect the functionality offered by Hibernate + or other persistence managers.

      + +

      Performing CRUD on non-updatable records

      +

      + If the jOOQ code-generator cannot detect any PRIMARY KEY, or UNIQUE KEY + on your tables, then the generated artefacts implement TableRecord, + instead of UpdatableRecord. A TableRecord can perform the same CRUD + operations as we have seen before, if you provide it with the necessary + key fields. The API looks like this: +

      + +
      +// INSERT or UPDATE the record using the provided keys
      +int storeUsing(TableField<R, ?>... keys)
      +
      +// DELETE a record using the provided keys
      +int deleteUsing(TableField<R, ?>... keys);
      +
      +// Reflects changes made in the database to this Record
      +void refreshUsing(TableField<R, ?>... keys);
      + +

      + This is useful if your RDBMS does not support referential constraints (e.g. MySQL's + MyISAM), or if you want to + store records to an unconstrained view. An example lifecycle of a book without + any keys can then be implemented as such: +

      +
      +// Create a new record and insert it into the database
      +TBookRecord book = create.newRecord(T_BOOK);
      +book.setTitle("My first book");
      +book.storeUsing(TBook.ID);
      +
      +// Update it with new values
      +book.setPublishedIn(2010);
      +book.storeUsing(TBook.ID);
      +
      +// Delete it
      +book.deleteUsing(TBook.ID);
      +
      + +
      - Query and its subtypes + The Query and its various subtypes + + The Query type hierarchy is what you use to execute queries. It has the + following subtypes for each kind of operation + + +

      SELECT statements

      +

      + There are essentially two ways of creating SELECT statements in jOOQ. + For historical reasons, you can create + or + + objects and add additional query clauses, such as + or + to it. + Since jOOQ 1.3, there is also the possibility to + create SELECT statements using jOOQ's + in a much more intuitive + and SQL-like way. +

      +

      Use the DSL API when:

      +
        +
      • You want your code to look like SQL
      • +
      • You want your IDE to help you with auto-completion (you will not be able to write select .. order by .. where .. join or any of that stuff)
      • +
      +

      Use the regular API when:

      +
        +
      • You want to create your query step-by-step, creating query parts one-by-one
      • +
      • You need to assemble your query from various places, passing the query around, adding new conditions and joins on the way
      • +
      +

      In any case, all API's will construct the same underlying + implementation object, and in many cases, you can combine the two + approaches. Let's check out the various SELECT statement types:

      + +
        +
      • : + This Query subtype stands for a general type of SELECT statement. + It is also the main Select type for the + . When executed, this object + will hold a . + This type is further subtyped for the various uses of a SELECT statement as such:
      • +
      • : + This Query will allow for selecting from single physical Tables only. + It therefore has access to the Table's generic type parameter + <R extends Record> and will provide a matching Result<R>. + This is especially useful if <R> is a subtype of + . + Then you will be able to perform updates on your result set immediately.
      • +
      • : + This Query will allow for selecting a subset of Fields from several + Tables. Because the results of such a query are considered of an anonymous + or ad-hoc type, this Query will bind <R> to the general type Record + itself. The purpose of this Query type is to allow for full SQL support, + including SELECT, JOIN and GROUP BY clauses.
      • +
      + +

      Example: SQL query and DSL query

      + + + + + + + + + +
      A sample SQL statement...and its equivalent in jOOQ's DSL API
      +-- Select all books by authors born after 1920, named "Paulo" 
      +-- from a catalogue consisting of authors and books:
      +
      +
      +SELECT * 
      +  FROM t_author a 
      +  JOIN t_book b 
      +    ON a.id = b.author_id 
      + WHERE a.year_of_birth > 1920 
      +   AND a.first_name = 'Paulo'
      + ORDER BY b.title
      +// Instanciate your factory using a JDBC connection.
      +Factory create = new Factory(connection, SQLDialect.ORACLE);
      +
      +// Execute the query "on a single line"
      +Result<Record> result = create.select()
      +    .from(T_AUTHOR)
      +    .join(T_BOOK)
      +    .on(ID.equal(AUTHOR_ID))
      +    .where(YEAR_OF_BIRTH.greaterThan(1920)
      +    .and(FIRST_NAME.equal("Paulo")))
      +    .orderBy(TITLE).fetch();
      + +

      + In the above example, some generated artefacts are used for querying. + In this case, T_AUTHOR and T_BOOK are instances of types + and + respectively. + Their full qualification would read TAuthor.T_AUTHOR and TBook.T_BOOK, but in many cases, + it's useful to static import elements involved with queries, in order to decrease verbosity. +

      + +

      + Apart from the singleton Table instances TAuthor.T_AUTHOR and + TBook.T_BOOK, these generated classes also contain one static member + for every physical field, such as TAuthor.ID or TBook.TAUTHOR_ID, etc. +

      + +
        +
      • For more information about code generation, check out the manual's section about + .
      • +
      • For more DSL examples, please consider the manual's section about the + .
      • +
      + +

      Example: Non-DSL query

      +

      + If you choose not to use the DSL API (for instance, because you don't + want to add Query parts in the order SQL expects them), you can use + this syntax: +

      +
      +// Re-use the factory to create a SelectQuery. This example will not make use of static imports...
      +SelectQuery q = create.selectQuery();
      +q.addFrom(TAuthor.T_AUTHOR);
      +
      +// This example shows some "mixed" API usage, where the JOIN is added with the standard API, and the 
      +// Condition is created using the DSL API
      +q.addJoin(TBook.T_BOOK, TAuthor.ID.equal(TBook.AUTHOR_ID));
      +
      +// The AND operator between Conditions is implicit here
      +q.addConditions(TAuthor.YEAR_OF_BIRTH.greaterThan(1920));
      +q.addConditions(TAuthor.FIRST_NAME.equal("Paulo"));
      +q.addOrderBy(TBook.TITLE);
      + +

      Fetching data

      +

      + The interface extends + , + which provides a range of methods to fetch data from the database. + Once you have constructed your SELECT query (see examples above), you + may choose to either simply execute() it, or use a variety of convenience + fetchXXX() methods. +

      +

      + See the manual's + + for more details. +

      + + +

      INSERT Statements

      +

      jOOQ supports two modes for INSERT statements. + The INSERT VALUES and the INSERT SELECT syntax

      + +

      Example: SQL query and DSL query

      + + + + + + + + + +
      A typical INSERT query looks like this...and how it's done with jOOQ
      +INSERT INTO T_AUTHOR 
      +    (ID, FIRST_NAME, LAST_NAME)
      +VALUES 
      +    (100, 'Hermann', 'Hesse'),
      +    (101, 'Alfred', 'Döblin');
      +
      +create.insertInto(T_AUTHOR, 
      +          TAuthor.ID, TAuthor.FIRST_NAME, TAuthor.LAST_NAME)
      +      .values(100, "Hermann", "Hesse")
      +      .values(101, "Alfred", "Döblin")
      +      .execute();
      + +

      The DSL syntax tries to stay close to actual SQL. In detail, + however, Java is limited in its possibilities. That's why the + .values() clause is repeated for every record. Some RDBMS support + inserting several records at the same time. This is also supported in + jOOQ, and simulated using INSERT INTO .. SELECT .. UNION ALL SELECT .. + clauses for those RDBMS that don't support this syntax. +

      +

      Note: Just like in SQL itself, you can have syntax errors when you + don't have matching numbers of fields/values. Also, you can run into + runtime problems, if your field/value types don't match.

      + +

      Example: DSL Query, alternative syntax

      +

      MySQL (and some other RDBMS) allow for using an UPDATE-like syntax + for INSERT statements. This is also supported in jOOQ, should you + prefer that syntax. The above INSERT statement can also be expressed + as follows:

      +
      +create.insertInto(T_AUTHOR)
      +      .set(TAuthor.ID, 100)
      +      .set(TAuthor.FIRST_NAME, "Hermann")
      +      .set(TAuthor.LAST_NAME, "Hesse")
      +      .newRecord()
      +      .set(TAuthor.ID, 101)
      +      .set(TAuthor.FIRST_NAME, "Alfred")
      +      .set(TAuthor.LAST_NAME, "Döblin")
      +      .execute();
      +

      As you can see, this syntax is a bit more verbose, but also more + type-safe, as every field can be matched with its value.

      + +

      Example: ON DUPLICATE KEY UPDATE clause

      +

      The MySQL database supports a very convenient way to INSERT or + UPDATE a record. This is a non-standard extension to the SQL syntax, + which is supported by jOOQ and simulated in other RDBMS, where this is + possible. Here is an example how to use the ON DUPLICATE KEY UPDATE + clause:

      +
      +// Add a new author called "Koontz" with ID 3.
      +// If that ID is already present, update the author's name
      +create.insertInto(T_AUTHOR, TAuthor.ID, TAuthor.LAST_NAME)
      +      .values(3, "Koontz")
      +      .onDuplicateKeyUpdate()
      +      .set(TAuthor.LAST_NAME, "Koontz")
      +      .execute();
      + +

      Example: INSERT .. RETURNING clause

      +

      The Postgres database has native support for an INSERT .. RETURNING + clause. This is a very powerful concept that is simulated for all + other dialects using JDBC's + + method. Take this example:

      + +
      +// Add another author, with a generated ID
      +Record<?> record =
      +create.insertInto(T_AUTHOR, TAuthor.FIRST_NAME, TAuthor.LAST_NAME)
      +      .values("Charlotte", "Roche")
      +      .returning(TAuthor.ID)
      +      .fetchOne();
      +
      +System.out.println(record.getValue(TAuthor.ID));
      +
      +// For some RDBMS, this also works when inserting several values
      +Result<?> result =
      +create.insertInto(T_AUTHOR, TAuthor.FIRST_NAME, TAuthor.LAST_NAME)
      +      .values("Johann Wolfgang", "von Goethe")
      +      .values("Friedrich", "Schiller")
      +      // You can request any field. Also trigger-generated values
      +      .returning(TAuthor.ID, TAuthor.CREATION_DATE)
      +      .fetch();
      + +

      Example: Non-DSL Query

      +

      You can always use the more verbose regular syntax of the InsertQuery, if you need more control:

      +
      +// Insert a new author into the T_AUTHOR table
      +InsertQuery<TAuthorRecord> i = create.insertQuery(T_AUTHOR);
      +i.addValue(TAuthor.ID, 100);
      +i.addValue(TAuthor.FIRST_NAME, "Hermann");
      +i.addValue(TAuthor.LAST_NAME, "Hesse");
      +
      +i.newRecord();
      +i.addValue(TAuthor.ID, 101);
      +i.addValue(TAuthor.FIRST_NAME, "Alfred");
      +i.addValue(TAuthor.LAST_NAME, "Döblin");
      +i.execute();
      + +

      Example: INSERT Query combined with SELECT statements

      +

      The InsertQuery.addValue() method is overloaded, such that you can + also provide a Field, potentially containing an expression:

      +
      +// Insert a new author into the T_AUTHOR table
      +InsertQuery<TAuthorRecord> i = create.insertQuery(T_AUTHOR);
      +i.addValue(TAuthor.ID, create.select(TAuthor.ID.max().add(1)).from(T_AUTHOR).asField())
      +i.addValue(TAuthor.FIRST_NAME, "Hermann");
      +i.addValue(TAuthor.LAST_NAME, "Hesse");
      +i.execute();
      +

      Note that especially MySQL (and some other RDBMS) has some + limitations regarding that syntax. You may not be able to + select from the same table you're inserting into

      + +

      Example: INSERT SELECT syntax support

      +

      In some occasions, you may prefer the INSERT SELECT syntax, for instance, when + you copy records from one table to another:

      +
      +Insert i = create.insertInto(T_AUTHOR_ARCHIVE,
      +           create.selectFrom(T_AUTHOR).where(TAuthor.DECEASED.equal(1)));
      +i.execute();
      + + +

      UPDATE Statements

      +

      UPDATE statements are only possible on single tables. Support for + multi-table updates will be implemented in the near future.

      + +

      Example: SQL query and DSL query

      + + + + + + + + + +
      A typical UPDATE query looks like this...and how it's done with jOOQ
      +
      +UPDATE T_AUTHOR
      +   SET FIRST_NAME = 'Hermann',
      +       LAST_NAME = 'Hesse'
      + WHERE ID = 3;
      +
      +create.update(T_AUTHOR)
      +      .set(TAuthor.FIRST_NAME, "Hermann")
      +      .set(TAuthor.LAST_NAME, "Hesse")
      +      .where(TAuthor.ID.equal(3))
      +      .execute();
      + +

      Example: Non-DSL Query

      +

      Using the class, + this is how you could express an UPDATE statement:

      +
      +UpdateQuery<TAuthorRecord> u = create.updateQuery(T_AUTHOR);
      +u.addValue(TAuthor.FIRST_NAME, "Hermann");
      +u.addValue(TAuthor.FIRST_NAME, "Hesse");
      +u.addConditions(TAuthor.ID.equal(3));
      +u.execute();
      + + +

      DELETE Statements

      +

      DELETE statements are only possible on single tables. Support for + multi-table deletes will be implemented in the near future.

      + +

      Example: SQL query and DSL query

      + + + + + + + + + +
      A typical DELETE query looks like this...and how it's done with jOOQ
      +
      +DELETE T_AUTHOR
      + WHERE ID = 100;
      +
      +create.delete(T_AUTHOR)
      +      .where(TAuthor.ID.equal(100))
      +      .execute();
      + +

      Example: Non-DSL Query

      +

      Using the class, + this is how you could express a DELETE statement:

      +
      +DeleteQuery<TAuthorRecord> d = create.deleteQuery(T_AUTHOR);
      +d.addConditions(TAuthor.ID.equal(100));
      +d.execute();
      + + +

      MERGE Statement

      +

      + The MERGE statement is one of the most advanced standardised SQL + constructs, which is supported by DB2, HSQLDB, Oracle, SQL Server and + Sybase (MySQL has the similar INSERT .. ON DUPLICATE KEY UPDATE + construct. H2's MERGE variant is currently not supported.) +

      +

      + The point of the standard MERGE statement is to take a TARGET table, and + merge (INSERT, UPDATE) data from a SOURCE table into it. DB2, Oracle, + SQL Server and Sybase also allow for DELETING some data and for adding + many additional clauses. Those non-standard extensions are currently + not supported. Here is an example: +

      + + + + + + +
      +-- Check if there is already an author called 'Hitchcock'
      +-- If there is, rename him to John. If there isn't add him.
      +
      +MERGE INTO T_AUTHOR
      +USING (SELECT 1 FROM DUAL)
      +ON (LAST_NAME = 'Hitchcock')
      +WHEN MATCHED THEN UPDATE SET FIRST_NAME = 'John'
      +WHEN NOT MATCHED THEN INSERT (LAST_NAME) VALUES ('Hitchcock')
      +
      +create.mergeInto(T_AUTHOR)
      +      .using(create().selectOne())
      +      .on(TAuthor.LAST_NAME.equal("Hitchcock"))
      +      .whenMatchedThenUpdate()
      +      .set(TAuthor.FIRST_NAME, "John")
      +      .whenNotMatchedThenInsert(TAuthor.LAST_NAME)
      +      .values("Hitchcock")
      +      .execute();
      + + +

      TRUNCATE Statement

      +

      + The syntax is trivial: +

      + + + + + +
      TRUNCATE TABLE T_AUTHOR;
      +
      create.truncate(T_AUTHOR).execute();
      +

      This is not supported by Ingres and SQLite. jOOQ will execute a DELETE FROM + T_AUTHOR statement instead.

      +
      + + +
      ResultQuery and various ways of fetching data
      @@ -520,7 +1005,7 @@ BigDecimal getValueAsBigDecimal(int fieldIndex);
      - DSL or fluent API + DSL or fluent API. Where SQL meets Java
      Complete SELECT syntax