Tenho que fazer um programa com tratamento de exceções

Estou tentando puxar os elementos de um arraylist de uma classe, para outra só para poder implementar no banco de dados.

MAIN

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Collections;

public class Rec1tlp1 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws SQLException {
        Lista_Produtos menu = new Lista_Produtos();
        String url = "jdbc:postgresql://localhost:5432/rec1tlp1?user=postgres&password=1234";

        java.util.Scanner leia = new java.util.Scanner(System.in);

        Connection conn = DriverManager.getConnection(url);
        Statement st = conn.createStatement();

        int opcao = 1;
        boolean continua = true;
        while (opcao != 0) {
            System.out.println("Menu");
            System.out.println("1 – Cadastrar um Produto no Banco de Dados");
            System.out.println("2 - Remover um Produto do Bando de Dados pelo ID");
            System.out.println("3 - Cadastrar um Produto na Lista de produtos não vendidos");
            System.out.println("4 - Remover um Produto da Lista de produtos não vendidos pelo nome");
            System.out.println("5 - Buscar Produtos por uma descrição no Banco de dados");
            System.out.println("6- Imprimir os Produtos cadastrados no Banco de dados ordenados pelo id");
            System.out.println("7- Imprimir a Lista de produtos não vendidos em ordem alfabética pelo nome dos produtos");
            System.out.println("8 – Cadastrar a venda de um produto no banco de dados a partir do ID, decrementando a");
            System.out.println("9- Cadastrar no Banco de Dados a Lista de produtos não vendidos");
            System.out.println("10 – Imprimir os 10 produtos vendidos mais baratos");
            System.out.println("0 – Sair");
            do {
                try {
                    System.out.println("Opção:");
                    opcao = Integer.parseInt(leia.nextLine());
                    continua = false;

                } catch (NumberFormatException e) {
                    System.out.println("Valor não numérico. Tente novamente!");
                }

            } while (continua);

            switch (opcao) {
                case 0: {
                    System.out.println("Encerrando o programa. Obrigada!");
                    break;
                }
                case 1: {

                    System.out.println("Digite o nome do produto:");
                    String nome = leia.nextLine();
                    System.out.println("Digite a descrição do produto:");
                    String descricao = leia.nextLine();
                    System.out.println("Digite o preço do produto:");
                    double preco = Double.parseDouble(leia.nextLine());
                    System.out.println("Dite a quantidade em estoque:");
                    int quantidade = Integer.parseInt(leia.nextLine());
                    continua = false;

                    String sql = "insert into produto (nome, descricao, preco, quantidade_estoque)"
                            + "values ('" + nome + "', '" + descricao + "', " + preco + ", " + quantidade + ");";

                    st.executeUpdate(sql);
                    System.out.println(sql);
                    break;
                }
                case 2: {
                    do {
                        try {
                            System.out.println("Digite o ID do produto para ser excluido do banco:");
                            int id = Integer.parseInt(leia.nextLine());
                            String sql = "delete from produto where id = " + id + ";";

                            st.executeUpdate(sql);
                            System.out.println(sql);

                            continua = false;
                        } catch (NumberFormatException e) {
                            System.out.println("Valor não numérico. Tente novamente!");
                        }

                    } while (continua);
                    break;
                }
                case 3: {
                    System.out.println("Cadastrando produto não vendido");
                    System.out.println("Digite o nome do produto:");
                    String nome = leia.nextLine();
                    System.out.println("Digite a descrição do produto:");
                    String descricao = leia.nextLine();
                    System.out.println("Digite o preço do produto:");
                    double preco = Double.parseDouble(leia.nextLine());
                    System.out.println("Dite a quantidade em estoque:");
                    int quantidade_estoque = Integer.parseInt(leia.nextLine());

                    Produto p = new Produto(0, nome, descricao, preco, quantidade_estoque);
                    menu.adicionar_produtos(p);
                    break;
                }
                case 4: {
                    menu.listar();
                    System.out.println("Digite o nome do produto para ser excluido:");
                    String nome = leia.nextLine();
                    menu.remover(nome);
                    menu.listar();
                    break;
                }
                case 5: {
                    System.out.println("Digite a descrição do produto:");
                    String descricao = leia.nextLine();
                    String sql = "Select nome, descricao from produto where descricao "
                            + "ilike '%" + descricao + "%' order by descricao;";
                    ResultSet res = st.executeQuery(sql);
                    while (res.next()) {
                        String nome = res.getString("nome");
                        descricao = res.getString("descricao");
                        System.out.println(" Produto: \n Nome: " + nome + ", Descrição: " + descricao + ";");

                    }
                    break;
                }
                case 6: {
                    String sql = "select*from produto order by id;";
                    ResultSet res = st.executeQuery(sql);

                    while (res.next()) {
                        int id = res.getInt("id");
                        String nome = res.getString("nome");
                        String descricao = res.getString("descricao");
                        double preco = res.getDouble("preco");
                        int quantidade_estoque = res.getInt("quantidade_estoque");

                        Produto produto = new Produto(id, nome, descricao, preco, quantidade_estoque);

                        System.out.println(produto);
                    }
                    break;
                }
                case 7: {
                    menu.listar_ordem();
                    
                    break;
                }
                case 8: {
                    do {
                        try {
                            System.out.println("Digite o id para cadastrar a venda:");
                            int id = Integer.parseInt(leia.nextLine());
                            String sql = "Update produto set quantidade_estoque = quantidade_estoque-1 where id=" + id + ";";
                            st.executeUpdate(sql);
                            continua = false;
                        } catch (NumberFormatException e) {
                            System.out.println("Valor não numérico. Tente novamente!");
                        }

                    } while (continua);
                    
                    break;
                }
                case 9: {
                for(int i=0; i<menu.lista.size(); i++){
                menu.lista.get(i);
                
//                    menu.lista.get(i);
//                    String sql = "Insert into produto (nome, descricao, preco,  quantidade_estoque)"
//                            + "values('"+menu.lista.getnome+"', '"+produto.getDescricao()+"', "
//                    +produto.getPreco()+","+produto.getQuantidade_estoque()+");";
//                System.out.println(sql);
                }
                    
                    
                }
            }
        }

    }

}

Produto

package rec1tlp1;

import java.util.Objects;

public class Produto implements Comparable<Produto> {

    private int id;
    private String nome;
    private String descricao;
    private double preco;
    private int quantidade_estoque;

    public Produto() {

    }

    public Produto(int id, String nome, String descricao, double preco, int quantidade_em_estoque) {
        this.id = id;
        this.nome = nome;
        this.descricao = descricao;
        this.preco = preco;
        this.quantidade_estoque = quantidade_em_estoque;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public double getPreco() {
        return preco;
    }

    public void setPreco(double preco) {
        this.preco = preco;
    }

    public int getQuantidade_estoque() {
        return quantidade_estoque;
    }

    public void setQuantidade_estoque(int quantidade_estoque) {
        this.quantidade_estoque = quantidade_estoque;
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 31 * hash + this.id;
        hash = 31 * hash + Objects.hashCode(this.nome);
        hash = 31 * hash + Objects.hashCode(this.descricao);
        hash = 31 * hash + (int) (Double.doubleToLongBits(this.preco) ^ (Double.doubleToLongBits(this.preco) >>> 32));
        hash = 31 * hash + this.quantidade_estoque;
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Produto other = (Produto) obj;
        if (this.id != other.id) {
            return false;
        }
        if (Double.doubleToLongBits(this.preco) != Double.doubleToLongBits(other.preco)) {
            return false;
        }
        if (this.quantidade_estoque != other.quantidade_estoque) {
            return false;
        }
        if (!Objects.equals(this.nome, other.nome)) {
            return false;
        }
        if (!Objects.equals(this.descricao, other.descricao)) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "Produto (" + id
                + "), Nome: " + nome
                + ", Descrição:" + descricao
                + ", Preço:" + preco
                + ", Quantidade_em_estoque:" + quantidade_estoque + ';';
    }

    @Override
    public int compareTo(Produto t) {
        return this.nome.compareTo(t.getNome());
    }
}

ARRAY

package rec1tlp1;

import java.util.ArrayList;
import java.util.Collections;

public class Lista_Produtos {

    ArrayList<Produto> lista = new ArrayList<Produto>();

    public Lista_Produtos() {

    }

    public void adicionar_produtos(Produto produto) {
        lista.add(produto);
    }

    public void listar() {
        String retorno = "";
        for (Produto produto : lista) {
            retorno += produto + "\n";
        }
        System.out.println(retorno);
    }

    public void listar_ordem() {
        Collections.sort(this.lista);
        String retorno = "";
        for (Produto produto : lista) {
            retorno += produto + "\n";
        }
        System.out.println(retorno);
    }

    public void limpar() {
        lista.clear();
    }

    public void remover(String nome) {
        for (int i = 0; i < lista.size(); i++) {
            Produto produto = lista.get(i);
            if (produto.getNome().equalsIgnoreCase(nome)) {
                lista.remove(produto);
                System.out.println("Produto Removido Com Sucesso");

            } else {
                System.out.println("Produto não encontrado");
            }
        }

    }
//    public void add_bd(){
//        String sql= "";
//            for(Produto produto: lista){
//            sql = "Insert into produto (nome, descricao, preco,  quantidade_estoque)"
//                                 + "values('"+produto.getNome()+"', '"+produto.getDescricao()+"', "
//                    +produto.getPreco()+","+produto.getQuantidade_estoque()+");";
//                System.out.println(sql);    
//        }
//    };
}