private class CreatePreparedStatementCommand extends AbstractStatementCommand { private final int returnGeneratedKeys; private CreatePreparedStatementCommand(int returnGeneratedKeys) { this.returnGeneratedKeys = returnGeneratedKeys; } @Override protected PreparedStatement execute(Connection connection, String sql) throws SQLException { if (returnGeneratedKeys == USE_COLUMN_NAMES && keyColumnNames != null) { return connection.prepareStatement(sql, keyColumnNames.toArray(EMPTY_STRING_ARRAY)); } if (returnGeneratedKeys != 0) { return connection.prepareStatement(sql, returnGeneratedKeys); } if (appearsLikeStoredProc(sql)) { if (resultSetHoldability == -1) { return connection.prepareCall(sql, resultSetType, resultSetConcurrency); } return connection.prepareCall(sql, resultSetType, resultSetConcurrency, resultSetHoldability); } if (resultSetHoldability == -1) { return connection.prepareStatement(sql, resultSetType, resultSetConcurrency); } return connection.prepareStatement(sql, resultSetType, resultSetConcurrency, resultSetHoldability); } private boolean appearsLikeStoredProc(String sql) { return sql.matches("\\s*[{]?\\s*[?]?\\s*[=]?\\s*[cC][aA][lL][lL].*"); } }
protected PreparedStatement execute(Connection connection, String sql) throws SQLException { if (returnGeneratedKeys != 0) return connection.prepareStatement(sql, returnGeneratedKeys); if (appearsLikeStoredProc(sql)) return connection.prepareCall(sql); return connection.prepareStatement(sql); }
PreparedStatement execute(Connection connection, String sql) throws SQLException { if (returnGeneratedKeys != 0) return connection.prepareStatement(sql, returnGeneratedKeys); if (appearsLikeStoredProc(sql)) return connection.prepareCall(sql); return connection.prepareStatement(sql); }
@Override protected PreparedStatement execute(Connection connection, String sql) throws SQLException { if (returnGeneratedKeys == USE_COLUMN_NAMES && keyColumnNames != null) { return connection.prepareStatement(sql, keyColumnNames.toArray(EMPTY_STRING_ARRAY)); } if (returnGeneratedKeys != 0) { return connection.prepareStatement(sql, returnGeneratedKeys); } if (appearsLikeStoredProc(sql)) { if (resultSetHoldability == -1) { return connection.prepareCall(sql, resultSetType, resultSetConcurrency); } return connection.prepareCall(sql, resultSetType, resultSetConcurrency, resultSetHoldability); } if (resultSetHoldability == -1) { return connection.prepareStatement(sql, resultSetType, resultSetConcurrency); } return connection.prepareStatement(sql, resultSetType, resultSetConcurrency, resultSetHoldability); }