Java, SQL and jOOQ.
Best Practices and Lessons Learned from Writing Awesome Java and SQL Code. Get some hands-on insight on what's behind developing jOOQ.
- Posts
- 786 from 20 Jul 2011 to 7 May 2026
- Posting
- now and then (3 in the last year)
- Kind
- company blog
- Feed
- https://blog.jooq.org/feed/
2026 3
2025 5
- Consider using JSON arrays instead of JSON objects for serialisation
- When SQL Meets Lambda Expressions
- Think About SQL MERGE in Terms of a RIGHT JOIN
- Resisting the Urge to Document Everything Everywhere
- jOOQ 3.20 released with ClickHouse, Databricks, and much more DuckDB support, new modules, Oracle type hierarchies, more spatial support, decfloat and synonym support, hidden columns, Scala 3, Kotlin 2, and much more
2024 4
2023 16
- jOOQ 3.19’s new Explicit and Implicit to-many path joins
- Workaround for MySQL’s “can’t specify target table for update in FROM clause” Error
- jOOQ 3.19.0 Released with DuckDB, Trino, Oracle 23c support, join path improvements, an official gradle plugin, commercial maven repositories, policies, UDT paths, trigger meta data, hierarchies, and much more
- Maven Coordinates of the most popular JDBC Drivers
- To DAO or not to DAO
- JDBC Connection URLs of the Most Popular RDBMS
- How to Generate Package Private Code with jOOQ’s Code Generator
- How to Pass a Table Valued Parameter to a T-SQL Function with jOOQ
- How to Turn a List of Flat Elements into a Hierarchy in Java, SQL, or jOOQ
- 3.18.0 Release with Support for more Diagnostics, SQL/JSON, Oracle Associative Arrays, Multi dimensional Arrays, R2DBC 1.0
- How to use jOOQ’s Converters with UNION Operations
- How to Write a Derived Table in jOOQ
- The Performance Impact of SQL’s FILTER Clause
- Emulating Window Functions in MySQL 5.7
- Why You Should Execute jOOQ Queries With jOOQ
- jOOQ’s R2DBC LoggingConnection to log all SQL statements
2022 37
- When to Use jOOQ and When to Use Native SQL
- LATERAL is Your Friend to Create Local Column Variables in SQL
- Calling Procedures with Default Parameters using JDBC or jOOQ
- Using jOOQ’s Implicit Join From Within the JOIN .. ON Clause
- A Brief Overview over the Most Common jOOQ Types
- How to Plot an ASCII Bar Chart with SQL
- The Second Best Way to Fetch a Spring Data JPA DTO Projection
- Cannot resolve symbol ‘VERSION_3_17’ in jOOQ generated code
- jOOQ 3.17 Supports Implicit Join also in DML
- A Condition is a Field
- The Many Ways to Return Data From SQL DML
- How to Integration Test Stored Procedures with jOOQ
- Using H2 as a Test Database Product with jOOQ
- The Best Way to Call Stored Procedures from Java: With jOOQ
- Create Dynamic Views with jOOQ 3.17’s new Virtual Client Side Computed Columns
- 3.17.0 Release with Computed Columns, Audit Columns, Pattern Matching, Reactive Transactions and Kotlin Coroutine Support
- How to Filter a SQL Nested Collection by a Value
- The Performance of Various To-Many Nesting Algorithms
- Changing SELECT .. FROM Into FROM .. SELECT Does Not “Fix” SQL
- The Many Different Ways to Fetch Data in jOOQ
- Setting the JDBC Statement.setFetchSize() to 1 for Single Row Queries
- How to Typesafely Map a Nested SQL Collection into a Nested Java Map with jOOQ
- A Quick and Dirty Way to Concatenate Two Vaguely Related Tables in SQL
- Nested Transactions in jOOQ
- How to Fetch Sequence Values with jOOQ
- Various Meanings of SQL’s PARTITION BY Syntax
- Use MULTISET Predicates to Compare Data Sets
- Projecting Type Safe Nested TableRecords with jOOQ 3.17
- jOOQ 3.16 and Java EE vs Jakarta EE
- No More MultipleBagFetchException Thanks to Multiset Nested Collections
- Approximating e With SQL
- Traversing jOOQ Expression Trees with the new Traverser API
- Detect Accidental Blocking Calls when Using R2DBC
- A Rarely Seen, but Useful SQL Feature: CORRESPONDING
- Using jOOQ’s DiagnosticsConnection to detect N+1 Queries
- The Useful BigQuery * EXCEPT Syntax
- 3.16.0 Release with a new Public Query Object Model API, Spatial Support, YugabyteDB Support and Much More
2021 32
- How to customise a jOOQ Configuration that is injected using Spring Boot
- Using JDK Collectors to De-duplicate parent/child nested collections
- Why You Should Use jOOQ With Code Generation
- Fun with PostGIS: Mandelbrot Set, Game of Life, and More
- PostgreSQL 14’s enable_memoize For Improved Performance of Nested Loop Joins
- Java’s Checked Exceptions Are Just Weird Union Types
- Functional Dependencies in SQL GROUP BY
- Write C-Style Local Static Variables in Java 16
- The jOOQ Parser Ignore Comment Syntax
- Use jOOλ’s Sneaky Throw to Avoid Checked Exceptions
- Using Testcontainers to Generate jOOQ Code
- Using jOOQ to write vendor agnostic SQL with JPA’s native query or @Formula
- Vendor Agnostic, Dynamic Procedural Logic with jOOQ
- MySQL’s allowMultiQueries flag with JDBC and jOOQ
- 10 Things You Didn’t Know About jOOQ
- Formatting ASCII Charts With jOOQ
- Standard SQL/JSON – The Sobering Parts
- Ad-hoc Data Type Conversion with jOOQ 3.15
- Reactive SQL with jOOQ 3.15 and R2DBC
- 3.15.0 Release with Support for R2DBC, Nested ROW, ARRAY, and MULTISET types, 5 new SQL dialects, CREATE PROCEDURE, FUNCTION, and TRIGGER support and Much More
- jOOQ 3.15’s New Multiset Operator Will Change How You Think About SQL
- Quickly Trying out jOOQ with Jbang!
- How to Prevent Execution Plan Troubles when Querying Skewed Data, with jOOQ
- Use ResultQuery.collect() to Implement Powerful Mappings
- How to Get an RDBMS Server Version with SQL
- Use IN List Padding to Your JDBC Application to Avoid Cursor Cache Contention Problems
- Never Again Forget to Call .execute() in jOOQ
- Calculating Pagination Metadata Without Extra Roundtrips in SQL
- Simulating Latency with SQL / JDBC
- Translating Stored Procedures Between Dialects
- Implementing a generic REDUCE aggregate function with SQL
- jOOQ Internals: Pushing up SQL fragments
2020 17
- Automatically Transform Oracle Style Implicit Joins to ANSI JOIN using jOOQ
- jOOQ 3.14 Released With SQL/XML and SQL/JSON Support
- Using jOOQ 3.14 Synthetic Foreign Keys to Write Implicit Joins on Views
- Nesting Collections With jOOQ 3.14’s SQL/XML or SQL/JSON support
- Having “constant” columns in foreign keys
- Use NATURAL FULL JOIN to compare two tables in SQL
- Could we Have a Language That Hides Collections From Us?
- Using SQL Server FOR XML and FOR JSON Syntax on Other RDBMS With jOOQ
- The Many Flavours of the Arcane SQL MERGE Statement
- What’s a “String” in the jOOQ API?
- Create Empty Optional SQL Clauses with jOOQ
- Using Java 13+ Text Blocks for Plain SQL with jOOQ
- Never Concatenate Strings With jOOQ
- 5 Ways to Better Understand SQL by Adding Optional Parentheses
- SQL DISTINCT is not a function
- Use the jOOQ-Refaster Module for Automatic Migration off of Deprecated jOOQ API
- jOOQ 3.13 Released with More API and Tooling for DDL Management
2019 24
- Stop Mapping Stuff in Your Middleware. Use SQL’s XML or JSON Operators Instead
- A Guide to SQL Naming Conventions
- Dogfooding in Product Development
- A Quick Trick to Make a Java Stream Construction Lazy
- How to Map MySQL’s TINYINT(1) to Boolean in jOOQ
- What’s Faster? COUNT(*) or COUNT(1)?
- Oracle’s BINARY_DOUBLE Can Be Much Faster Than NUMBER
- Using DISTINCT ON in Non-PostgreSQL Databases
- Quantified LIKE ANY predicates in jOOQ 3.12
- jOOQ 3.12 Released With a new Procedural Language API
- How to Fetch All Current Identity Values in Oracle
- How to Use jOOQ’s Commercial Distributions with Spring Boot
- How to Write a Simple, yet Extensible API
- Using IGNORE NULLS With SQL Window Functions to Fill Gaps
- Calling an Oracle Function with PL/SQL BOOLEAN Type from SQL
- The Difference Between SQL’s JOIN .. ON Clause and the Where Clause
- The Cost of Useless Surrogate Keys in Relationship Tables
- Calculating Weighted Averages When Joining Tables in SQL
- How to Statically Override the Default Settings in jOOQ
- How to Calculate a Cumulative Percentage in SQL
- Lesser Known jOOλ Features: Useful Collectors
- How to Emulate PERCENTILE_DISC in MySQL and Other RDBMS
- Calculate Percentiles to Learn About Data Set Skew in SQL
- How to Work Around ORA-38104: Columns referenced in the ON Clause cannot be updated
2018 37
- How to Unit Test Your Annotation Processor using jOOR
- How to Create a Good MCVE (Minimal Complete Verifiable Example)
- How to Aggregate an Archive Log’s Deltas into a Snapshot with SQL
- How to Use jOOQ’s UpdatableRecord for CRUD to Apply a Delta
- Imperative Loop or Functional Stream Pipeline? Beware of the Performance Impact!
- Writing Custom Aggregate Functions in SQL Just Like a Java 8 Stream Collector
- How to Use SQL UPDATE .. RETURNING to Run DML More Efficiently
- How to Write a Multiplication Aggregate Function in SQL
- How to Reduce Syntactic Overhead Using the SQL WINDOW Clause
- Beware of Hidden PL/SQL to SQL Context Switches
- Find the Next Non-NULL Row in a Series With SQL
- A Frequent Question: Does jOOQ Have a First Level Cache?
- How to Write Multiset Conditions With Oracle VARRAY Types
- How SQL DISTINCT and ORDER BY are Related
- PostgreSQL 11’s Support for SQL Standard GROUPS and EXCLUDE Window Function Clauses
- Using UNPIVOT to Traverse a Configuration Table’s Rows and Columns
- Oracle’s OFFSET .. FETCH Can be Slower than Classic ROWNUM Filtering
- How to Patch Your IDE to Fix an Urgent Bug
- jOOQ 3.11 Released With 4 New Databases, Implicit Joins, Diagnostics, and Much More
- Truth First, or Why You Should Mostly Implement Database First Designs
- How to Group By “Nothing” in SQL
- Selecting all Columns Except One in PostgreSQL
- How to Run a Bulk INSERT .. RETURNING Statement With Oracle and JDBC
- The Performance Difference Between SQL Row-by-row Updating, Batch Updating, and Bulk Updating
- When Using Bind Variables is not Enough: Dynamic IN Lists
- Why SQL Bind Variables are Important for Performance
- Mocking JDBC Using a Set of SQL String / Result Pairs
- How to Compile a Class at Runtime with Java 8 and 9
- A Completely Overhauled, Modularised jOOQ 3.11, Ready for Java 11
- Correct Reflective Access to Interface Default Methods in Java 8, 9, 10
- Top 10 SQL Dialect Emulations Implemented in jOOQ
- Map Reducing a Set of Values Into a Dynamic SQL UNION Query
- How to Order Versioned File Names Semantically in Java
- Type Safe Implicit JOIN Through Path Navigation in jOOQ 3.11
- How to Implement Your Own XJC Plugin to Generate toString(), equals(), and hashCode() Methods
- Calculating Tupper’s Self-Referential Formula With SQL
- Top 5 Hidden jOOQ Features
2017 59
- Do not GRANT ALL PRIVILEGES to your Production Users
- Creating a Microsoft Excel Style Pivot Table With Grand Totals in SQL
- The Cost of JDBC Server Roundtrips
- How to Fetch Oracle DBMS_OUTPUT from JDBC
- A Common Mistake Developers Make When Caching Nullable Values
- How to Ensure Your Code Works With Older JDKs
- Using JDK 10’s Local Variable Type Inference with jOOQ
- How to Avoid Excessive Sorts in Window Functions
- Squeezing Another 10% Speed Increase out of jOOQ using JMC and JMH
- jOOQ Tuesdays: Nicolai Parlog Talks About Java 9
- Benchmarking JDK String.replace() vs Apache Commons StringUtils.replace()
- 10 Cool SQL Optimisations That do not Depend on the Cost Model
- How to Write Efficient TOP N Queries in SQL
- JOIN Elimination: An Essential Optimiser Feature for Advanced SQL Usage
- jOOQ 3.10 Supports JPA AttributeConverter
- Finding all Palindromes Contained in Strings with SQL
- jOOQ Tuesdays: Oliver Gierke Talks About Spring Data
- 5 Things You May Not Have Known About jOOQ
- jOOQ 3.10 Supports Exciting MySQL 8.0 Features
- A Curious Java Language Feature and How it Produced a Subtle Bug
- Don’t Overdo the “Principle of Least Astonishment” Cargo Cult
- Don’t Extract Everything Into a Method
- How I Incorrectly Fetched JDBC ResultSets. Again.
- Are Java 8 Streams Truly Lazy? Not Completely!
- A Basic Programming Pattern: Filter First, Map Later
- ORMs Should Update “Changed” Values, Not Just “Modified” Ones
- jOOQ Tuesdays: Gerald Sangudi and Keshav Murthy Reveal the Secrets of N1QL (SQL on JSON)
- Using Kotlin’s Apply Function for Dynamic SQL with jOOQ
- How to Use SQL INTERSECT to Work Around SQL’s NULL Logic
- How to Find Redundant Indexes in SQL
- How to Execute a SQL Query Only if Another SQL Query has no Results
- When to Use Bind Values, and When to Use Inline Values in SQL
- How to Generate at Least One Row in SQL
- 10 Nice Examples of Writing SQL in Kotlin With jOOQ
- 10 Tips on How to be a Great Programmer
- The Difficulty of Tuning Queries Over a Database Link – Or How I Learned to Stop Worrying and Love the DUAL@LINK Table
- Don’t Use the String Concatenation “Trick” in SQL Predicates
- How to Calculate Multiple Aggregate Functions in a Single Query
- jOOQ Tuesdays: Richard North Makes Database Testing More Reproducible with Testcontainers
- How to Fetch Multiple Oracle Execution Plans in One Nice Query
- SQL IN Predicate: With IN List or With Array? Which is Faster?
- How to Benchmark Alternative SQL Queries to Find the Fastest Query
- The Open-Closed Principle is Often Not What You Think it Is
- Creating Tables Dum and Dee in PostgreSQL
- A Nice API Design Gem: Strategy Pattern With Lambdas
- Faster SQL Through Occasionally Choosing Natural Keys Over Surrogate Keys
- Many SQL Performance Problems Stem from “Unnecessary, Mandatory Work”
- Impress Your Coworkers With the Incredible NATURAL FULL OUTER JOIN!
- jOOQ Tuesdays: Brett Wooldridge Shows What it Takes to Write the Fastest Java Connection Pool
- Should I Implement the Arcane Iterator.remove() Method? Yes You (Probably) Should
- Beautiful SQL: Lateral Unnesting of Array Columns
- How to Fetch Oracle 12c Implicit Cursors with JDBC and jOOQ
- How to Execute SQL Batches With JDBC and jOOQ
- How to Emulate Partial Indexes in Oracle
- A Functional Programming Approach to Dynamic SQL with jOOQ
- A Probably Incomplete, Comprehensive Guide to the Many Different Ways to JOIN Tables in SQL
- jOOQ 3.10 Supports SQL Server’s Table Valued Parameters
- How to Write a Quick and Dirty Converter in jOOQ
- How to Prevent JDBC Resource Leaks with JDBC and with jOOQ
2016 68
- jOOQ Tuesdays: Mario Fusco Talks About Functional and Declarative Programming
- What we Need is Standardised Non-OSS Licenses
- Do You Really Have to Name Everything in Software?
- SQL, Streams, For Comprehension… It’s All the Same
- A Beginner’s Guide to the True Order of SQL Operations
- Prevent SQL Injection with SQL Builders Like jOOQ
- Use jOOQ to Read / Write Oracle PL/SQL RECORD Types
- Applying Queueing Theory to Dynamic Connection Pool Sizing with FlexyPool
- Why You Should (Sometimes) Avoid Expressions in SQL Predicates
- A Little Known SQL Feature: Use Logical Windowing to Aggregate Sliding Ranges
- Don’t Even use COUNT(*) For Primary Key Existence Checks
- How to Quickly Rename all Primary Keys in Oracle
- Be Careful When Emulating Parameterised Views with SYS_CONTEXT in Oracle
- jOOQ Tuesdays: Daniel Dietrich Explains the Benefits of Object-Functional Programming
- Does Your Database Really Use Your Index?
- Why You Should Design Your Database to Optimise for Statistics
- When to Choose SQL and When to Choose NoSQL
- A Hidden jOOQ Gem: Foreach Loop Over ResultQuery
- Avoid Using COUNT() in SQL When You Could Use EXISTS()
- Using jOOλ to Combine Several Java 8 Collectors into One
- jOOQ Tuesdays: Chris Saxon Explains the 3 Things Every Developer Should Know About SQL
- All Libraries Should Follow a Zero-Dependency Policy
- Why Most Programmers Get Pagination Wrong
- Why I Completely Forgot That Programming Languages Have While Loops
- Say NO to Excessive Use of Surrogate Keys if Performance Really Matters to You
- The Java JIT Compiler is Darn Good at Optimization
- How to Know if a Given Index Can be Dropped
- How Adding a UNIQUE Constraint on a OneToOne Relationship Helps Performance
- Quantified Comparison Predicates – Some of SQL’s Rarest Species
- “What Java ORM do You Prefer, and Why?” – SQL of Course!
- Say NO to Venn Diagrams When Explaining JOINs
- How Functional Programming will (Finally) do Away With the GoF Patterns
- With Commercial Licensing, Invest in Innovation, not Protection
- jOOQ Tuesdays: Thorben Janssen Shares his Hibernate Performance Secrets
- Correlated Subqueries are Evil and Slow. Or are They?
- Cyclops-react Organises the Cambrian Explosion of Java 8 Libraries
- JSR-308 and the Checker Framework Add Even More Typesafety to jOOQ 3.9
- 10 SQL Tricks That You Didn’t Think Were Possible
- The Parameterless Generic Method Antipattern
- jOOQ Tuesdays: Ming-Yee Iu Gives Insight into Language Integrated Querying
- Would We Still Criticise Checked Exceptions, If Java had a Better try-catch Syntax?
- Using jOOQ’s ExecuteListener to Prevent Write Operations on a Connection
- Using SQL to Calculate the Popularity (on Stack Overflow) of Derby, H2, and HSQLDB
- 10 Features I Wish Java Would Steal From the Kotlin Language
- Watch Out For Recursion in Java 8’s [Primitive]Stream.iterate()
- Time for some Funky SQL: Prefix Sum Calculation
- 10 Easy Steps to a Complete Understanding of SQL
- Ceylon Might Just be the Only (JVM) Language that Got Nulls Right
- Java 10’s new Local-Variable Type Inference
- SQL JOIN or EXISTS? Chances Are, You’re Doing it Wrong
- UI Developers! Choose Sensible Default Ordering!
- How to Support Java 6, 8, 9 in a Single API
- (Ab)using Java 8 FunctionalInterfaces as Local Methods
- A Very Peculiar, but Possibly Cunning Kotlin Language Feature
- The Mute Design Pattern
- An Ingenious Workaround to Emulate an Application of Union Types in Java
- jOOQ Tuesdays: Glenn Paulley Gives Insight into SQL’s History
- Dear API Designer. Are You Sure, You Want to Return a Primitive?
- The 5 Golden Rules of Giving Awesome Customer Support
- Using Oracle AQ via Java 8 Streams
- How to Detect Slow Queries with jOOQ
- How to Pattern-Match Files and Display Adjacent Lines in Java
- Use JUnit’s expected exceptions sparingly
- Impress Your Coworkers by Using SQL UNPIVOT!
- Reactive Database Access – Part 3 – Using jOOQ with Scala, Futures and Actors
- If Java Were Designed Today: The Synchronizable Interface
- 2016 Will be the Year Remembered as When Java Finally Had Window Functions!
- A Curious Incidence of a jOOQ API Design Flaw
2015 85
- Oracle LONG and LONG RAW Causing “Stream has already been closed” Exception
- Please, Java. Do Finally Support Multiline String Literals
- JEP 277 “Enhanced Deprecation” is Nice. But Here’s a Much Better Alternative
- How to Fill Sparse Data With the Previous Non-Empty Value in SQL
- Reactive Database Access – Part 2 – Actors
- jOOQ Tuesdays: Rafael Winterhalter is Wrestling Byte Code with Byte Buddy
- SQL GROUP BY and Functional Dependencies: A Very Useful Feature
- 3 Reasons why You Shouldn’t Replace Your for-loops by Stream.forEach()
- Reactive Database Access – Part 1 – Why “Async”
- A Subtle AutoCloseable Contract Change Between Java 7 and Java 8
- How to Find the Longest Consecutive Series of Events in SQL
- How to Find the Closest Subset Sum with SQL
- The Danger of Subtype Polymorphism Applied to Tuples
- jOOQ Tuesdays: Markus Winand is on a Modern SQL Mission
- The 10 Most Popular DB Engines (SQL and NoSQL) in 2015
- Semi Join and Anti Join Should Have Their Own Syntax in SQL
- A Beginner’s Guide to Using Java EE with jOOQ
- How to Quickly Enumerate Indexes in Oracle 11gR2
- You Probably don’t Use SQL INTERSECT or EXCEPT Often Enough
- Let’s Meet at JAX London and Other Events to Talk About SQL
- It is all about the JDBC Basics
- Comparing Imperative and Functional Algorithms in Java 8
- Don’t Format Dates in SQL. Use the DATE Literal!
- How to use Java 8 Functional Programming to Generate an Alphabetic Sequence
- There is no Such Thing as Object-Relational Impedance Mismatch
- Divided we Stand: Optional
- jOOQ Tuesdays: Thomas Müller Unveils How HSQLDB Evolved into the Popular H2 Database
- Common SQL Clauses and Their Equivalents in Java 8 Streams
- Top 10 Useful, Yet Paranoid Java Programming Techniques
- RAM is the new SSD
- INTERSECT – the Underestimated Two-Way IN Predicate
- Java 8’s Method References Put Further Restrictions on Overloading
- NULL is Not The Billion Dollar Mistake. A Counter-Rant
- What the sun.misc.Unsafe Misery Teaches Us
- What’s Even Harder Than Dates and Timezones? Dates and Timezones in SQL / JDBC!
- How to Debug Your Maven Build with Eclipse
- Implementing Client-Side Row-Level Security with jOOQ
- Querying Your Database from Millions of Fibers (Rather than Thousands of Threads)
- jOOQ Tuesdays: Axel Fontaine Predicts Exciting Times as our Industry is Maturing
- What Exactly are SQL Views?
- Do Not Make This Mistake When Developing an SPI
- How to Access a Method’s Result Value From the Finally Block
- Use This Preference to Speed up Your Eclipse m2e Configuration
- Functional Programming in Java 8 with vavr
- Use this Neat Window Function Trick to Calculate Time Differences in a Time Series
- PostgreSQL’s Best-Kept Secret, and how to Use it with jOOQ
- How SQL GROUP BY Should Have Been Designed – Like Neo4j’s Implicit GROUP BY
- This Common API Technique is Actually an Anti-Pattern
- Do Not Think That One Second is Fast for Query Execution
- Let’s Review How to Insert Clob or Blob via JDBC
- Is Your Eclipse Running a Bit Slow? Just Use This Simple Trick!
- jOOQ Tuesdays: Vlad Mihalcea Gives Deep Insight into SQL and Hibernate
- It’s the Little Things: The PL/SQL NULL Statement, and why Every Language Should have One
- How to FlatMap a JDBC ResultSet with Java 8?
- How to Avoid the Dreaded Dead Lock when Pessimistic Locking – And some Awesome Java 8 Usage!
- How to Use Java 8 Streams to Swiftly Replace Elements in a List
- Don’t be Fooled by Generics and Backwards-Compatibility. Use Generic Generic Types
- Hack up a Simple JDBC ResultSet Cache Using jOOQ’s MockDataProvider
- jOOQ vs. Hibernate: When to Choose Which
- One Year After Java 8’s Release, IDEs and Compilers are not Fully Ready Yet
- The 10 Things Everyone does Wrong when Committing Pull Requests
- 3 Reasons why It’s Okay to Stick with SQL
- Integrating jOOQ with Grails Featuring the UWS-jOOQ Plugin
- Yak Shaving is a Good Way to Improve an API
- The Java Legacy is Constantly Growing
- Avoid Recursion in ConcurrentHashMap.computeIfAbsent()
- jOOQ – Ein alternativer Weg mit Java und SQL zu arbeiten
- How to use SQL PIVOT to Compare Two Tables in Your Database
- How to Extract a Date Part in SQL
- jOOQ vs. Slick – Pros and Cons of Each Approach
- Thou Shalt Not Name Thy Method “Equals”
- jOOQ Tuesdays: Raoul-Gabriel Urma Explores What Java 8 and English have in Common
- 10 SQL Articles Everyone Must Read
- Top 10 Easy Performance Optimisations in Java
- Still Using Windows 3.1? So why stick to SQL-92?
- Top 5 Use-Cases For Nested Types
- You Will Regret Applying Overloading with Lambdas!
- How to Translate SQL GROUP BY and Aggregations to Java 8
- jOOQ Newsletter: January 21, 2015 – Groovy and Open Source – jOOQ and the strong Swiss Franc
- Open Source Doesn’t Need More Support. It Needs Better Business Models
- Suis-je Groovy? No! What Pivotal’s Decision Means for Open Source Software
- Using Java 8 to Prevent Excessively Wide Logs
- Infinite Loops. Or: Anything that Can Possibly Go Wrong, Does.
- Transform Your SQL Data into Charts Using jOOQ and JavaFX
- How to Emulate the MEDIAN() Aggregate Function Using Inverse Distribution Functions
2014 132
- The Awesome PostgreSQL 9.4 / SQL:2003 FILTER Clause for Aggregate Functions
- Leaky Abstractions, or How to Bind Oracle DATE Correctly with Hibernate
- Are You Binding Your Oracle DATEs Correctly? I Bet You Aren’t
- A True SQL Gem You Didn’t Know Yet: The EVERY() Aggregate Function
- jOOQ Tuesdays: Yalım Gerger brings Git to Oracle
- Really Too Bad that Java 8 Doesn’t Have Iterable.stream()
- The Inconvenient Truth About Dynamic vs. Static Typing
- Don’t be “Clever”: The Double Curly Braces Anti Pattern
- Do You Really Understand SQL’s GROUP BY and HAVING clauses?
- How to Integrate Commercial Third-Party Artefacts into Your Maven Build
- Use MySQL’s Strict Mode on all new Projects!
- jOOQ Tip of the Day: Discover all Primary Keys
- Don’t Migrate to MariaDB just yet. MySQL is Back!
- Have You Ever Wondered About the Difference Between NOT NULL and DEFAULT?
- Don’t Miss out on Awesome SQL Power with FIRST_VALUE(), LAST_VALUE(), LEAD(), and LAG()
- Access PL/SQL Procedures From Java with jOOQ, a JPublisher Alternative
- 10 Things You Didn’t Know About Java
- A RESTful JDBC HTTP Server built on top of jOOQ
- Let’s Stream a Map in Java 8 with jOOλ
- Stop Claiming that you’re Using a Schemaless Database
- The dreaded DefaultAbstractHelperImpl
- Don’t Miss out on Writing Java 8 SQL One-Liners with jOOλ or jOOQ
- The Caveats of Dual-Licensing
- Using Your RDBMS for Messaging is Totally OK
- Asynchronous SQL Execution with jOOQ and Java 8’s CompletableFuture
- Top 10 Most Popular Articles on the jOOQ Blog
- How Nashorn Impacts API Evolution on a New Level
- This Just In!! Updated Silly Keyword Metrics
- This is the Final Discussion!
- Why You Should NOT Implement Layered Architectures
- When the Java 8 Streams API is not Enough
- Look no Further! The Final Answer to “Where to Put Generated Code?”
- Stop Manually Importing Your ERD Export into jOOQ
- Awesome SQL Trick: Constraints on Views
- jOOQ Newsletter: September 02, 2014 – Do You Really Need Support?
- PL/SQL backtraces for debugging
- Integrating jOOQ with PostgreSQL: Partitioning
- All You Ever Need to Know About Recursive SQL
- jOOQ Newsletter: August 15, 2014 – jOOQ 3.5 Outlook
- A Wonderful SQL Feature: Quantified Comparison Predicates (ANY, ALL)
- The Difference Between ROW_NUMBER(), RANK(), and DENSE_RANK()
- The “Free”, “Standard”, “Open” Software Heresy
- SQL Tip of the Day: Be Wary of SELECT COUNT(*)
- Join the No OFFSET Movement!
- Are You Using SQL PIVOT Yet? You Should!
- The 10 Most Annoying Things Coming Back to Java After Some Days of Scala
- Using Oracle AQ in Java Won’t Get Any Easier Than This
- jOOQ Tip of the Day: Reuse Bind Values
- Top 10 Very Very VERY Important Topics to Discuss
- jOOQ Newsletter: jOOLY 23, 2014 – Only 8 Days Left in jOOLY
- Frightening Facts about MySQL
- Keeping things DRY: Method overloading
- Logon Triggers: The Oracle Database Magic Bullet
- Java 8 Friday: More Functional Relational Transformation
- PostgreSQL’s Table-Valued Functions
- jOOQ Newsletter: July 2, 2014 – jOOLY 20% Discount Offering
- Stop Unit Testing Database Code
- Flyway and jOOQ for Unbeatable SQL Development Productivity
- Should I Put That Table Alias or Not?
- SQL Server ALTER TABLE SET DEFAULT
- What Big Data Really Is
- Java 8 Friday: The Best Java 8 Resources – Your Weekend is Booked
- jOOQ Newsletter: June 18, 2014 – jOOQ goes JavaOne™
- Conference Legal Disclaimers
- Java 8 Friday: 10 Subtle Mistakes When Using the Streams API
- Stop Trying to Emulate SQL OFFSET Pagination with Your In-House DB Framework!
- Java 8 Friday: JavaScript goes SQL with Nashorn and jOOQ
- Don’t Forget to Set the SEQUENCE CACHE Size
- Java 8 Friday: Most Internal DSLs are Outdated
- QueryDSL vs. jOOQ. Feature Completeness vs. Now More Than Ever
- What if Developing a Simple Data Management Application Just Took 1-2 Days?
- Yet Another 10 Common Mistakes Java Developers Make When Writing SQL (You Won’t BELIEVE the Last One)
- Java 8 Friday: Better Exceptions
- Oracle Tip: v$sql Table or View does not Exist
- jOOQ Newsletter: May 21, 2014 – jOOQ Community Video Tutorials
- Free as in Beer has caused Heartbleed (and Much More)
- Java 8 Friday: API Designers, be Careful
- SQL Server Trick: Circumvent Missing ORDER BY Clause
- The Index You’ve Added is Useless. Why?
- Java 8 Friday: Language Design is Subtle
- How to Implement Sort Indirection in SQL
- Three-State Booleans in Java
- Java 8 Friday: Let’s Deprecate Those Legacy Libs
- jOOQ Newsletter: April 30, 2014
- NoSQL? No, SQL! – How to Calculate Running Totals
- jOOQ Newsletter: April 16, 2014 – Monthly, Yearly, Perpetual licenses now available
- How can I do This? – With SQL of Course!
- Java Rocks More Than Ever
- The Top 10 Productivity Booster Techs for Programmers
- Java 8 Friday: The Dark Side of Java 8
- jOOQ Newsletter: April 2, 2014
- Spring API Bingo
- Open Source Completely Underestimates Contributor License Agreements
- Java 8 Friday: Optional Will Remain an Option in Java
- CUME_DIST(), a Lesser-Known SQL Gem
- Java 8 Friday: Java 8 Will Revolutionize Database Access
- A Better Query Language than SQL
- A SQL query DSL for Scala by ScalikeJDBC
- Java 8 Friday Goodies: Lean Concurrency
- The 10 Commandments of Programming
- jOOQ Newsletter: March 12, 2014
- Java 8 Friday Goodies: SQL ResultSet Streams
- An Open Source License to Increase Your Street Credibility
- Modern Shareholder Value Hopes
- Java 8 Friday Goodies: Easy-as-Pie Local Caching
- How to Eliminate Bugs Through High Cohesion
- jOOQ Newsletter: February 26, 2014
- The JDBC Boolean Compatibility List
- Feature Request for the JLS: Auto-Rethrow
- Java 8 Friday Goodies: Local Transaction Scope
- An MS Access SQL Transformation Odyssey
- When All Else Fails: Using “the Unsafe”
- Free Java Profiling with Oracle Java Mission Control
- Java 8 Friday Goodies: Map Enhancements
- No CROSS JOIN in MS Access
- jOOQ Newsletter: February 12, 2014
- Why Everyone Hates Operator Overloading
- Java 8 Friday Goodies: Lambdas and SQL
- You’re Very Likely to Have Gotten SQL Date Time Arithmetic Wrong!
- JDBC 4.0’s Lesser-known Clob.free() and Blob.free() Methods
- Java 8 Friday Goodies: Lambdas and Sorting
- Introducing CQLC – a Query DSL for Cassandra’s CQL in Go, Inspired by jOOQ
- Java 8 Friday Goodies: The New New I/O APIs
- jOOQ Newsletter: January 22, 2014
- Java 8 Friday Goodies: Lambdas and XML
- What you Didn’t Know About JDBC Batch
- Do You Want to be a Better Software Developer?
- Advanced Java Trickery for Typesafe Query DSLs
- Lesser-Known SQL Features: DEFAULT VALUES
- The SQL Language’s Most Missing Feature
- Why Did SQLJ Die?
- Why Your Boring Data Will Outlast Your Sexy New Technology
2013 138
- Typesafe’s Slick is Not About SQL
- jOOQ Newsletter: December 30, 2013. Happy New Year!
- MySQL Bad Idea #666
- Ecto a Slick Query DSL for the Elixir Language
- MyBatis’ Alternative Transaction Management
- A Bit of SQL History
- Simplernate. A Query DSL for Hibernate, Inspired by jOOQ
- MongoDB “Lightning Fast Aggregation” Challenged with Oracle
- The Crystal Ball. Or, Oops, Michael Stonebraker did it Again
- Add LATERAL Joins or CROSS APPLY to Your SQL Tool Chain
- jOOQ, a Love Story
- Counting Distinct Records in SQL
- Free Open Source with Commercial Support
- When Source Code Comments Indicate Trouble
- Top 10 Ceylon Language Features I Wish We Had In Java
- The Jodd SQL Generator
- The Open Source Bikeshed.
- Detect JDBC API Misusage with JDBCLint
- Using jOOQ with JAX-RS to Build a Simple License Server
- A Lesser-Known Java 8 Feature: Generalized Target-Type Inference
- Using jOOQ With Groovy
- Deep Stack Traces Can be a Sign for Good Code Quality
- On Friday Dec 13th 2013, Things *WILL* go Wrong
- How to Create a Range From 1 to 10 in SQL
- Faster SQL Pagination with Keysets, Continued
- Where’s the Self-Confidence when Advertising Java 8, Oracle?
- A History of Databases in “No-tation”
- Popular ORMs Don’t do SQL
- Oracle GlassFish, or Why You Should Think About Open Source Again
- ID Lists Aren’t the Best Solution for the N+1 Problem
- Using SQL Injection Vulnerabilities to Dump Your Database
- Probably the Coolest SQL Feature: Window Functions
- Top 10 Lists of Common Java Mistakes (That Makes Top 100!)
- CUBRID: A Lesser-Known Korean OSS Database Gem
- jOOQ Newsletter October 28, 2013
- Top 5 Useful Hidden Eclipse Features
- Faster SQL Pagination with jOOQ Using the Seek Method
- Recursive SQL for Data Normalisation
- Who Says “I Want to Contribute” ?
- On Degrading Merchandise Quality
- A Significant Difference Between Open Source and Commercial Software
- Add Some Entropy to Your JVM
- The End of US Internet Governance
- Eclipse’s Awesome Block Selection Mode
- jOOQ Newsletter October 10, 2013
- jOOQ™ 3.2 Offering Commercial Licensing and Support
- SQL Trick: row_number() is to SELECT what dense_rank() is to SELECT DISTINCT
- Java Auto-Unboxing Gotcha. Beware!
- On MongoDB’s Success. Or Do Not Let Cynicism Kill Your Spirit
- The Premature Return to SQL
- This Beats Everything: Koding in the Cloud
- Will Another Play-Style Framework Make its Way to Java?
- Why do We Need RDBMS?
- Do You View Database Applications as Military Campaigns?
- Brian Goetz’s Final State of the Lambda Documentation
- Amazing Web Applications with PL/SQL and Formspider
- Fast File System Operations with Xtend, Lambdas, and ThreadPools
- jOOQ Newsletter September 17, 2013
- Why PostgreSQL is so Awesome
- PostgreSQL Syntax is a Mystery Only Exceeded by its Power
- Crazy Translations of Simple SQL Expressions to Various SQL Dialects
- PostgreSQL 9.3 Released!
- jOOQ Newsletter September 2013
- Tech Pro: Next Generation Social Content Syndication
- Heavyweights Martin Odersky, Erik Meijer and Roland Kuhn Team up for a Coursera Course
- Awesome Tweets About Recent Blog Post
- Column Stores: Teaching an Old Elephant New Tricks
- Silly Metrics: The Most Used Java Keywords
- How to Speed Up Apache Xalan’s XPath Processor by Factor 10x
- MIT Prof. Michael Stonebraker: “The Traditional RDBMS Wisdom is All Wrong”
- Plagiarism is Copyright Infringement AND Poor Form
- What Will be Oracle’s Next Big Acquisition?
- The Myth About Slow SQL JOIN Operations
- 10 Subtle Best Practices when Coding Java
- Apache Derby About to Adopt the Awesome SQL:2003 MERGE Statement
- Java EE 7: JSRs That Make You Powerful
- jOOQ Newsletter August 2013
- What if every object was an array? No more NullPointerExceptions!
- 10 More Common Mistakes Java Developers Make when Writing SQL
- Conference Gem: The MEDIT Symposium
- Twitter and the JVM
- Use ModelMapper and jOOQ to Regain Control of your Domain Model
- Oracle 12c Goodies: { CROSS | OUTER } APPLY
- 10 Reasons not to Choose a Particular Open Source software
- On Terms and Conditions
- MySQL Bad Idea #573
- SAP’s Hilarious SQL Whitepaper(s)
- jOOQ at the MEDIT Symposium
- The Announcer Badge on Stack Overflow
- 10 Common Mistakes Java Developers Make when Writing SQL
- Jenkins (and Others) about Dropping Support for Java 5
- How to Generate Date Ranges in Oracle SQL
- Leap Seconds. Will our Understanding of Time Change in 2015?
- How to Make Your Advertisement Look Like Spam
- 10 Things in SQL Server Which Don’t Work as Expected
- Nice Tutorial for Creating an External DSL with Xtext
- The Great Benevolent Dictator Getting Some Beating
- Internal DSLs on the Fast Lane
- SQL Templating with jOOQ or MyBatis
- Usability vs. Reusability
- Static, Non-Static. Mockable, Non-Mockable… Instead, Let’s Focus on Real Added Value…
- High Complexity and Low Throughput. Reasons for Using an ORM.
- LINQ and Java
- RedHat and MariaDB
- The Dangers of Correlating Subtype Polymorphism with Generic Polymorphism
- Using jOOQ with Play Framework
- A Couple of Reasons Why You Should Use PostgreSQL
- Strategy: Stop Using Linked-Lists
- Pinterest and SQL vs. NoSQL
- Subtle Changes in Java 8: Repeatable Annotations
- SQL Query Transformation Fun: Predicates with Row Value Expressions
- Rare Uses of a “ControlFlowException”
- jOOQ as a “PL/Java” language
- On Java 8’s introduction of Optional
- A Great Counter-Rant
- The Lame Side of Java’s Backwards-Compatibility
- A jOOX First-Time Experience Article
- How to Design a Good, Regular API
- Inadvertent Recursion Protection with Java ThreadLocals
- Java Streams Preview vs .Net LINQ
- Will Java add LINQ to EL 3.0 in JSR-341?
- Java Collections API Quirks
- Hibernate, and Querying 50k Records. Too Much?
- JUnit’s Evolving Structure
- How to Behave on Mailing Lists
- How to Execute Something Multiple Times in Java
- The Golden Rules of Code Documentation
- A Typesafety Comparison of SQL Access APIs
- Duck Typing in Scala: Structural Typing
- Easy Mocking of Your Database
- jOOQ’s Reason for Being
- Get hidden feature requests from your users
- Java, if this were a better world
- Java trivia: the double-checked locking pattern
- Defensive API evolution with Java interfaces
- A dirt-ugly hack to modify private final fields in Java
- Bloated JavaBeans™, Part II – or Don’t Add “Getters” to Your API
- Emulating the SQL standard derived column list
2012 68
- A map of all those new NoSQL, NewSQL, post-SQL, structured, unstructured database options that came out over the past year
- Row value expressions and the BETWEEN predicate
- Row value expressions and the NULL predicate
- Big Fail. How to recognise bad software
- JDEclipse: A must-have Java Decompiler
- Architect-Senior Java Developer with jOOQ skills
- JDK 8: State of the Collections
- How to provide a good pull request
- Wikileaks To Leak 5000 Open Source Java Projects With All That Private/Final Bullshit Removed
- JavaBeans™ should be extended to reduce bloat
- ElSql, a new external SQL DSL for Java
- J2eeBasedPreAuthenticatedWebAuthenticationDetailsSource… WAT??
- Learn Eclipse Keyboard Shortcuts Easily
- The IS DISTINCT FROM predicate
- How to get Oracle execution plans with Starts, E-Rows, A-Rows and A-Time columns
- A nice way of using jOOQ with Spring
- Throw checked exceptions like runtime exceptions in Java
- Alvor: Static SQL analysis in Strings passed to JDBC
- Syntax for calling “super” in Java 8 Defender methods
- Serious SQL: A “convex hull” of “correlated tables”
- You never stop learning about Oracle features
- SLICK, integrating SQL into Scala
- Survey about the Java 8 “default method” syntax
- MySQL Bad Idea #384
- The true spirit of Open Source
- Hilarious Rant about SQL Injection
- When will we have LINQ in Java?
- Database Abstraction and SQL Injection
- NOT IN vs. NOT EXISTS vs. LEFT JOIN / IS NULL: MySQL
- Open source user rants
- “NoSQL” should be called “SQL with alternative storage models”
- Funky String Function Simulation in SQLite
- Array, list, set, map, tuple, record literals in Java
- MyBatis’ Wicked Statement Builders
- FOR UPDATE simulation in SQL Server and CUBRID
- Simulation of TRUNC() in Derby
- How to simulate MySQL’s INSERT statement extensions
- ORM vs. SQL, compared to C vs. ASM
- jOOQ and Hibernate, a discussion
- jOOQ users’ most frequently used databases
- Exciting ideas in Java 8: Streams
- Must-have Eclipse plugin: AnyEdit Tools
- jDBI: A simple convenience layer on top of JDBC
- jOOQ website re-launch
- SQL tooling, the ranking
- A very refreshing point of view about language design
- Which database are you using jOOQ with?
- Blog has “moved”
- The Visitor Pattern Re-visited
- CROSS JOIN, a nice example for a rarely used operation
- Advanced SQL: Relational division in jOOQ
- jOOQ compared to iBatis
- Subtle SQL differences: IDENTITY columns
- Binary data in SQL, more trivia
- SQL and booleans, some trivia
- The depths of Java: API leak exposed through covariance
- The truth about IN and EXISTS in SQL
- jOOX and XSLT. An XML love story, continued
- SQL incompatibilities: NOT IN and NULL values
- CSS selectors in Java
- Use Xalan’s extension functions natively in jOOX
- jOOX answers many Stack Overflow questions
- Java 8 will have some support for unsigned integers
- jOOQ’s fluent API in BNF notation
- if – else coding style best practices
- The good API design
- Let’s revise the SQL FROM clause
- The Java Fluent API Designer Crash Course
2011 61
- Cut down 90% on RDBMS costs switching from Oracle to EnterpriseDB
- A neater way to use reflection in Java
- A Brief, Incomplete, and Mostly Wrong History of Programming Languages
- SQL in Scala, where jOOQ could go
- Java 8 virtual extension methods
- The ultimate SQL-DSL: jOOQ in Scala
- Subtle SQL differences: Constraint names
- A success story of SQL scaling horizontally
- A DBA’s point of view of Hibernate
- Arcane magic with the SQL:2003 MERGE statement
- GROUP BY ROLLUP / CUBE
- How schema meta data impacts Oracle query transformations
- Join the “dark side” with jOOQ
- Java’s missing unsigned integer types
- Overload API methods with care – the sequel
- jOOQ-meta. A “hard-core SQL” proof of concept
- Overload API methods with care
- Development schema, production schema
- Op4j and Lambda-J. For more fluency in Java
- Use jOOQ inside your H2 database
- SQL DSL’s in other languages
- jOOQ Tutorial by Ikai Lan
- What feature are you missing most in jOOQ?
- The comprehensive SQL bitwise operations compatibility list
- Derby casting madness – the sequel
- Java’s Arrays.asList(…) is underused
- jOOQ in the wild
- JDBC batch operations with jOOQ
- Liquibase for DB Migrations
- jOOQ and Google Cloud SQL Example
- Use jOOQ to transform java.sql.ResultSet
- Debug logging SQL with jOOQ
- Cloud Fever now also at Sybase
- What are procedures and functions after all?
- SQL Trouble with dummy tables
- Google Cloud SQL, the next step for jOOQ?
- Recursive queries with Oracle’s CONNECT BY clause
- How to use H2 with jOOQ
- Vaadin, a very nice web framework
- Stored procedures returning multiple cursors
- jOOQ has a new home page
- Suggestions for the Java, SQL and jOOQ Blog
- MentaBean, the ORM/SQL Builder of Mentawai
- Database schema navigation in Java
- Elmer Fudd’s opinion on jOOQ
- jOOX brand launch
- Oracle scalar subquery caching
- RDBMS bind variable casting madness
- Postgres INSERT .. RETURNING clause and how this can be simulated in other RDBMS
- Loading CSV data with jOOQ
- There’s still potential for new SQL dialects
- Oracle’s object-oriented PL/SQL extensions
- FluentDOM, another mimick of jQuery DOM manipulation, in PHP
- Another Fluent API: jOOX. Porting jQuery to Java
- The art of doing it right – who knows it?
- iciql, a fork of H2’s JaQu
- jOOQ and Java 7
- jOOQ makes a step forward towards JPA
- “Stop Hating Java” – A Funny Post by Igor Polevoy
- The power of REF CURSOR types
- Developer blog started for interesting insights in Java, SQL and jOOQ