private PreparedStatement statement(Object[] args, Sql annotation, Connection c) throws SQLException {
        logger.info("Start prepare statement");
        Map<String, Object> queryParams = new HashMap<String, Object>();
        int argNr = 1;
        if (args != null) {
            for (Object arg: args) {
                Mapper mapper = Mapper.Registry.get(arg.getClass());
                Map map = null;
                if (mapper != null) {
                    map = mapper.toMap(arg);
                }
                if (map != null) {
                    queryParams.putAll(mapper.toMap(arg));
                }
                else {
                    queryParams.put(argNr+"", arg);
                }
                argNr++;
            }
        }
        PreparedStatement st = PreparedStatementEx.prepare(c, annotation.value(), queryParams);
        return st;
    }