Não é garantido que há dados na tabela, também não é garantido que todos os dados irão atender a condição WHERE.
Antes de ler o ResultSet tem que verificar com o método .next()
if( rs.next() )
{
curso.setId(id);
curso.setNomecurso(rs.getString("nomecurso"));
curso.setNivel(rs.getString("nivel"));
curso.setDuracao(rs.getInt("duracao"));
} //end if
Quando tiver a necessidade de percorrer todos os registros
while( rs.next() )
{
} //end while
Outra coisa, você não está fechando o PreparedStatement com o seu método .close() isso pode drenar recursos com o tempo.