Ayuda execucion de query en codigo

Hola amigos pues miren necesito generar las combinaciones de 6500 tomadas de 70 para esto encontre un programa que usa un algoritmo el cual genera las combinaciones al vuelo es decir las escupe al instante ahora lo que quiero es guardar todas esas combinaciones en una base mi problema es donde situo la conexion porque si la pongo en el metodo escribir como lo hice jeje :P crea demasiadas conexiones y se satura porque forzosamente creo yo debo de ejecutar el insert dentro de escribir que es donde se generan con pocos numeros lo logre pero cuando aumenta me acabo las conexiones espero su ayuda gracias aqui pongo el codigo:

//Genera combinaciones de n,r
//Para compilar:
//javac combina.java
//Para ejecutar:
//java combina <n> <r> [-d]

import java.sql.*;

public class combina {
   
    static double p = 0, p1 = 0;
    static boolean detallado = false;
   
    public static void combinaciones(int n, int r) {
       
        //Genera las combinaciones utilizando
        //el algoritmo de Kenneth H. Rosen
       
        int i = 0, j = 0, ci = 0;
        int v[] = new int[n];
       
        for (i = 0; i < n; i++) {
            v[i] = i;
        } //Inicia v[]
       
        escribe(v, r);
        ci++;
        while (ci < p1) {
            i = r - 1;
            while (v[i] == n - r + i) {
                i--;
            }
            v[i] = v[i] + 1;
            for (j = i + 1; j < r; j++) {
                v[j] = v[i] + j - i;
            }
            escribe(v, r);
            ci++;
        }
    }
   
    public static void escribe(int v[], int r) {
        String driver = "org.postgresql.Driver";
        String connectString = "jdbc:postgresql://localhost:5432/combinaciones";
        String user = "procesos";
        String password = "procesos";
        try{
            Class.forName(driver);
            Connection con = DriverManager.getConnection(connectString, user , password);
            Statement stmt = con.createStatement();

           
           
            if (detallado) {
                p++;
                System.out.format("%6.0f / %6.0f=%6.2f%%->", p, p1, p / p1 * 100.0);
            }
            for (int i = 0; i < r; i++) {
                System.out.format("%6d", v[i]);
                //System.out.println(v[i]);
                stmt.executeQuery("INSERT INTO combi VALUES(" +v[i] +",'"+v[i+1] +"',"+v[i+2]+ " )");
            stmt.close();
            con.close();
            }
           
        }
       
        catch ( Exception e ){
            System.out.println(e.getMessage());
        }
        System.out.println("");
    }
   
    public static double factorial(int n, int m) {
        //Multiplica desde n hasta m-1. n>=m
        double f = 1;
        while (n > m) {
            f = f * n;
            n--;
        }
        return f;
    }
   
    public static void main(String args[]) {
        int n = 0, r = 0;
        String d = "-d";
       
        boolean error = false;
       
        if (args.length > 3) {
            error = true;
        }
       
        if (args.length == 3) {
            if (args[2].compareTo(d) == 0) {
                detallado = true;
            } else {
                error = true;
            }
        }
       
        if (!error) {
            try { //Captura la excepción para comprobar que n es un entero
                n = Integer.valueOf(args[0]).intValue();
            } catch (Exception e) {
                n = 0;
            }
           
            try { //Captura la excepción para comprobar que r es un entero
                r = Integer.valueOf(args[1]).intValue();
            } catch (Exception e) {
                r = 0;
            }
           
            if (n < 1 || r < 1 || n < r) {
                error = true;
            }
        }
       
        if (!error) {
            //p1=factorial(n)/factorial(r)/factorial(n-r)
            //Lo hace de esta forma para evitar errores de redondeo
            if ((n - r) > r) {
                p1 = factorial(n, n - r) / factorial(r, 1);
            } else {
                p1 = factorial(n, r) / factorial(n - r, 1);
            }
            combinaciones(n, r);
        } else {
            System.out.println("Uso: java combina <n> <r> [-d]");
            System.out.println("n,r son enteros mayores que 0");
            System.out.println("n>=r");
            System.out.println("-d muestra el progreso sobre el total.");
        }
    }
}

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de Livio

Sobre el tema

Lo mas correcto es crear una clase dentro del paquete que solo lleve la conexion. "Divide y vencerás"

Imagen de roberthino10

Gracias

Muchas gracias por la respuesta Livio pero al fin lo resolvi mañana pongo la solución por si alguien en algun momento necesita.