diff --git a/src/main/java/at/compax/tools/sql/SqlExecutor.java b/src/main/java/at/compax/tools/sql/SqlExecutor.java index cfca1ee..a843af6 100644 --- a/src/main/java/at/compax/tools/sql/SqlExecutor.java +++ b/src/main/java/at/compax/tools/sql/SqlExecutor.java @@ -179,6 +179,56 @@ public class SqlExecutor { return queryResultBuilder.rows(rows).build(); } + public static QueryResult executeUpdate(Connection conn, String sql, Object... parameters) throws SQLException { + log.trace("SQL: " + sql.trim()); + String updateQuery = sql.replaceAll(";$", "").trim(); + + @Cleanup + PreparedStatement stmt = conn.prepareStatement(updateQuery); + + if (parameters != null) { + int parameterIndex = 1; + for (Object object : parameters) { + if (object != null) { + if (object instanceof String) { + stmt.setString(parameterIndex, (String) object); + } else if (object instanceof Integer) { + stmt.setInt(parameterIndex, (Integer) object); + } else if (object instanceof Long) { + stmt.setLong(parameterIndex, (Long) object); + } else { + stmt.setString(parameterIndex, (String) object); + String message = String.format("Unhandled paramter type <%s>. Defaulting to String", object.getClass().getName()); + log.warn(message); + } + } else { + log.warn("parameter is null"); + } + parameterIndex++; + } + } + + long affectedRows = 0L; + QueryResultBuilder queryResultBuilder = QueryResult.builder(); + try { + affectedRows = stmt.executeUpdate(); + } catch (SQLException e) { + return queryResultBuilder // + .exception(e.getClass().getName()) // + .exceptionMessage(e.getMessage()) // + .build(); + } + + try { + handleUserErrors(conn, sql, stmt); + } catch (SqlExecutionException e) { + log.error(e.getMessage(), e); + + return queryResultBuilder.userErrors(e.getUserErrors()).build(); + } + + return queryResultBuilder.affectedRows(affectedRows).build(); +} private static Vector getColumnDefinitions(ResultSetMetaData metaData) throws SQLException { Vector columnDefinitions = new Vector(); diff --git a/src/main/java/at/compax/tools/sql/main/Main.java b/src/main/java/at/compax/tools/sql/main/Main.java index 29d6c45..da2f484 100644 --- a/src/main/java/at/compax/tools/sql/main/Main.java +++ b/src/main/java/at/compax/tools/sql/main/Main.java @@ -152,6 +152,8 @@ public class Main { String result; if (query.toLowerCase().startsWith("select")) { result = formatJsonObject(SqlExecutor.executeQuery(conn, query, null)); + } else if (query.toLowerCase().startsWith("update") || query.toLowerCase().startsWith("insert")) { + result = formatJsonObject(SqlExecutor.executeUpdate(conn, query)); } else { result = formatJsonObject(SqlExecutor.execute(conn, query)); } diff --git a/src/main/java/at/compax/tools/sql/model/QueryResult.java b/src/main/java/at/compax/tools/sql/model/QueryResult.java index cdcd3d4..2828652 100644 --- a/src/main/java/at/compax/tools/sql/model/QueryResult.java +++ b/src/main/java/at/compax/tools/sql/model/QueryResult.java @@ -44,4 +44,5 @@ public class QueryResult { private List userErrors; private String exception; private String exceptionMessage; + private long affectedRows; }