Consultando datas no BD

Boa Tarde Galera!

Estou fazendo um trabalho para a faculdade e me deparei com um problema. Tenho um método que deve receber como paramento duas datas (DataInicial e DataFinal).

 public static ArrayList<Compras> retriaveByData(Date dataInicial, Date dataFinal) throws SQLException{
    if (dataInicial == null || dataFinal == null){
        System.out.println("Digite as datas corretamente!");
    }
    System.out.println("Datas " + dataInicial + " " + dataFinal);
    ArrayList<Compras> aux = new ArrayList<>();
    
    Connection conn = BancoDados.createConnection();
    
    PreparedStatement stm = conn.prepareStatement("select * from compras where datas between ? and ? ");
    
    stm.setDate(1, dataInicial);
    stm.setDate(2, dataFinal);
    
    ResultSet rs = stm.getResultSet();
    
    while (rs.next()){
        Compras c = new Compras(rs.getInt("pk_compra"), 
                                rs.getInt("fk_funcionario"), 
                                rs.getInt("numero"), 
                                rs.getDate("datas"));
        aux.add(c);
    }
    
    return aux;
} 

Porém não estou conseguindo mandar as datas elas saem totalmente diferente do que eu passo. Como por exemplo:

Date date = new Date(2017, 10, 1);
    System.out.println(date);

Digitei o código acima para testar oque esta sendo enviado para o método e a saída foi: 3917-11-01.

Como devo enviar as datas para o método? Estou utilizado o date.sql.

Pra Date voce poe usar o SimpleDateFormat.
Dá uma olhada sobre Calendar tambem.

Certo. Qual o melhor jeito para eu fazer a formatação da data? Eu mando pro método como new Date("2016-01-01) e uso o SimpleFormatDate no método ?

Exemplo:

import java.util.Calendar;
import java.util.Date;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.text.ParseException;

public class Teste {        
    public static void main(String args[]) throws ParseException {
        SimpleDateFormat f = new SimpleDateFormat("dd/MM/yyyy");
        Date date = f.parse("31/12/2016");
        System.out.println(f.format(date));
    }
}