From 54032be1c04e293fc20184517c5b7da8864596c8 Mon Sep 17 00:00:00 2001 From: Antonio Freire Date: Thu, 26 Apr 2018 12:25:55 +0100 Subject: [PATCH] Improvement: No database connection required This merge request will add the ability to use this library with other frameworks, like Spring JDBC. It will also allow its use with PreparedStatements. Additional patches: Using try-with-resources on SQL statements. --- .../jonathanhds/sqlbuilder/Context.java | 20 +++++++++----- .../jonathanhds/sqlbuilder/Database.java | 2 +- .../sqlbuilder/builder/QueryBuilder.java | 4 +++ .../sqlbuilder/select/SelectTest.java | 26 ++++++++++++++++--- 4 files changed, 42 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/github/jonathanhds/sqlbuilder/Context.java b/src/main/java/com/github/jonathanhds/sqlbuilder/Context.java index 59e4687..5c36557 100644 --- a/src/main/java/com/github/jonathanhds/sqlbuilder/Context.java +++ b/src/main/java/com/github/jonathanhds/sqlbuilder/Context.java @@ -44,6 +44,13 @@ public Context(Database database, Connection connection) { parameters = new LinkedList<>(); } + public Context(Database database) { + this.database = database; + this.connection = null; + this.sql = new StringBuilder(); + this.parameters = new LinkedList<>(); + } + @Override public String toString() { return sql.toString(); @@ -111,14 +118,15 @@ private ResultSet execute(String sql) throws SQLException { } private PreparedStatement prepareStatement(String sql) throws SQLException { - PreparedStatement statement = connection.prepareStatement(sql); + try (PreparedStatement statement = connection.prepareStatement(sql)) { - int i = 1; - for (Object parameter : parameters) { - statement.setObject(i++, parameter); - } + int i = 1; + for (Object parameter : parameters) { + statement.setObject(i++, parameter); + } - return statement; + return statement; + } } } \ No newline at end of file diff --git a/src/main/java/com/github/jonathanhds/sqlbuilder/Database.java b/src/main/java/com/github/jonathanhds/sqlbuilder/Database.java index a62d162..8fa3f1a 100644 --- a/src/main/java/com/github/jonathanhds/sqlbuilder/Database.java +++ b/src/main/java/com/github/jonathanhds/sqlbuilder/Database.java @@ -1,5 +1,5 @@ package com.github.jonathanhds.sqlbuilder; public enum Database { - ORACLE, HSQLDB + ORACLE, HSQLDB, NONE } \ No newline at end of file diff --git a/src/main/java/com/github/jonathanhds/sqlbuilder/builder/QueryBuilder.java b/src/main/java/com/github/jonathanhds/sqlbuilder/builder/QueryBuilder.java index 4a2e94c..f06b775 100644 --- a/src/main/java/com/github/jonathanhds/sqlbuilder/builder/QueryBuilder.java +++ b/src/main/java/com/github/jonathanhds/sqlbuilder/builder/QueryBuilder.java @@ -23,6 +23,10 @@ public QueryBuilder(Database database, Connection connection) { this.context = new Context(database, connection); } + public QueryBuilder() { + this.context = new Context(Database.NONE); + } + public Select select() { return new Select(context); } diff --git a/src/test/java/com/github/jonathanhds/sqlbuilder/select/SelectTest.java b/src/test/java/com/github/jonathanhds/sqlbuilder/select/SelectTest.java index ae033b8..673a224 100644 --- a/src/test/java/com/github/jonathanhds/sqlbuilder/select/SelectTest.java +++ b/src/test/java/com/github/jonathanhds/sqlbuilder/select/SelectTest.java @@ -1,5 +1,6 @@ package com.github.jonathanhds.sqlbuilder.select; +import com.github.jonathanhds.sqlbuilder.builder.QueryBuilder; import com.github.jonathanhds.sqlbuilder.builder.QueryBuilderHSQLDB; import com.github.jonathanhds.sqlbuilder.builder.QueryBuilderOracle; import com.github.jonathanhds.sqlbuilder.support.*; @@ -9,6 +10,7 @@ import java.sql.Connection; import java.sql.SQLException; +import java.sql.Statement; import java.util.Calendar; import java.util.Date; import java.util.List; @@ -16,6 +18,7 @@ import static com.github.jonathanhds.sqlbuilder.select.OrderByType.DESC; import static java.util.Calendar.*; import static org.hamcrest.Matchers.*; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; public class SelectTest { @@ -25,18 +28,33 @@ public class SelectTest { @Before public void startConnection() throws Exception { connection = new MemoryDatabase().getConnection(); - connection.createStatement().executeQuery("SET DATABASE SQL SYNTAX ORA FALSE"); + try (Statement statement = connection.createStatement()) { + statement.executeQuery("SET DATABASE SQL SYNTAX ORA FALSE"); + } } @After public void closeConnection() throws Exception { - connection.createStatement().execute("SHUTDOWN"); + try (Statement statement = connection.createStatement()) { + statement.execute("SHUTDOWN"); + } if (!connection.isClosed()) { connection.close(); } } + @Test + public void selectWithoutDatabase() { + String query = new QueryBuilder() + .select() + .all() + .from() + .table("User u") + .toString(); + assertEquals(query, "SELECT\n*\nFROM\nUser u\n\n\n"); + } + @Test public void selectAllFromTable() throws Exception { List persons = new QueryBuilderHSQLDB(connection).select() @@ -332,7 +350,9 @@ public void selectColumnsFromTableGroupByHavingOrderBy() throws Exception { @Test public void selectAllFromTableWithPagination_Oracle() throws Exception { - connection.createStatement().executeQuery("SET DATABASE SQL SYNTAX ORA TRUE"); + try (Statement statement = connection.createStatement()) { + statement.executeQuery("SET DATABASE SQL SYNTAX ORA TRUE"); + } List persons = new QueryBuilderOracle(connection).select() .all() .from()