Querying a PostgreSQL Database in Java
Miller Trujillo
Staff Software Engineer
books, authors, categories, book_reviews
String sql = "SELECT b.title, a.first_name, a.last_name " + "FROM books b " +"INNER JOIN book_authors ba ON b.book_id = ba.book_id " + "INNER JOIN authors a ON ba.author_id = a.author_id " +"WHERE b.publication_year > ?";PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setInt(1, 2010); ResultSet rs = pstmt.executeQuery();
| title | first_name | last_name |
| -------------------------------------------------- | ---------- | --------- |
| Effective Java | Joshua | Bloch |
| Designing Data-Intensive Applications | Martin | Kleppmann |
-- INNER JOIN: only matches
SELECT b.title, r.rating
FROM books b
INNER JOIN book_reviews r
ON b.book_id = r.book_id;
-- LEFT JOIN: all left rows
SELECT b.title, r.rating
FROM books b
LEFT JOIN book_reviews r
ON b.book_id = r.book_id;

// Extracting the most recently published book String sql = "SELECT title FROM books " + "WHERE publication_year = ( " +" SELECT MAX(publication_year) FROM books " + ")";PreparedStatement pstmt = conn.prepareStatement(sql); ResultSet rs = pstmt.executeQuery();
| title |
| -------------------------------------------------- |
| Effective Java |
| Refactoring: Improving the Design of Existing Code |
// Extracting all the "Fantasy" books String sql = "SELECT title FROM books " + "WHERE category_id IN ( " +" SELECT category_id FROM categories WHERE name = ? " + ")";PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, "Fantasy"); ResultSet rs = pstmt.executeQuery();
| title |
| ---------------------------------------- |
| The Way of Kings |
| Harry Potter and the Philosopher's Stone |
+ is slow and hard to readappend() adds text, toString() returns the resultStringBuilder sb = new StringBuilder("SELECT * FROM ");sb.append("books");sb.append(" WHERE 1=1");sb.toString(); // SELECT * FROM books WHERE 1=1
Querying a PostgreSQL Database in Java