In the Database class, executeQuery() may throw an exception, while execute() and executeUpdate() do not.
Actually, any of the three can 'go wrong'' but, for the latter two methods, exceptions are caught somewhere before returning (and show up in the log). This means that the caller cannot know if something did go wrong or not.
Is this by design? Is there any compelling reason to hide the outcome from the caller?