@Override
    public MapConnector<String, Integer> putAll(final Map<? extends String, ? extends Integer> map) throws Exception {
        super.addSQLJob(new SQLJob<String, Integer>() {
            @Override
            public void executeJob(Connection con, Map<String, Integer> internalMap) throws SQLException {
                String stm = getCreateTableTmp(getConnectorInfo().getTableName());
                try (PreparedStatement prepStm = con.prepareStatement(stm)) {
                    prepStm.execute();
                }
                int n = 0;
                StringBuilder values = new StringBuilder();
                for (String s : getMap().keySet()) {
                    if (n == BLOCK_INSERT_COUNT || n == getMap().size() - 1) {
                        stm = "INSERT INTO " + getConnectorInfo().getTableName() + "tmp(key,value) VALUES " + values.toString() + ";";
                        try (PreparedStatement prepStm = con.prepareStatement(stm)) {
                            prepStm.execute();
                        }
                        values = new StringBuilder();
                        n = 0;
                    }
                    values = values.append("(").append("'").append(s).append("'").append(",").append(map.get(s)).append(")");
                    if (n + 1 != BLOCK_INSERT_COUNT && n + 1 != getMap().size() - 1) {
                        values = values.append(",");
                    }
                    n++;
                }
                stm = getMergeTables(getConnectorInfo().getTableName(), getConnectorInfo().getTableName() + "tmp");
                try (PreparedStatement prepStm = con.prepareStatement(stm)) {
                    prepStm.execute();
                }
                stm = "DROP TABLE " + getConnectorInfo().getTableName() + "tmp";
                try (PreparedStatement prepStm = con.prepareStatement(stm)) {
                    prepStm.execute();
                }
            }
        });
        return this;
    }