Olá pessal do forum…
Gostaria de saber que erro é esse que retorna a messagem
[i]Before start of result set[/i]
Grato desde já
Olá pessal do forum…
Gostaria de saber que erro é esse que retorna a messagem
[i]Before start of result set[/i]
Grato desde já
Boa noite.
O ideal quando ocorre uma Exception é postar o stack trace completo bem como o código referente ao erro.
Mas para este caso, em algum momento você está tentando utilizar uma referência ao Objeto ResultSet sem que ele tenha sido inicializado, ou seja, não há valor algum nele.
A exception deve apontar a linha que está ocorrendo o problema.
Abraços.
O código é o método para a atualização da tabela Curso de uma universidade fictícia
Segue o código comentado abaixo:
Connection con = Conexao.getConnection();//obtem a conexão
/* Monta um vetor com os cursos cadastrados*/
String sql = "SELECT COUNT(*) AS TOTAL FROM curso";
Statement st = (Statement) con.createStatement();
ResultSet rs = (ResultSet) st.executeQuery(sql);
int valor = 0;
if (rs.next()) {//obtem o tamanho do vetor
valor = rs.getInt("TOTAL");
}
String listaDeCursos[] = new String[valor];//declara esse vetor com o tamanho obtido
int k = 0;
sql = "SELECT * FROM curso";
st = (Statement) con.createStatement();
rs = (ResultSet) st.executeQuery(sql);
while (rs.next()) {//coloca os cursos cadastrados no vetor
listaDeCursos[k] = ((String) rs.getString("nome"));
k++;
}
con.close();
Arrays.sort(listaDeCursos);//Ordena o vetor em ordem alfabética
//fim da montagem do vetor
//Coloca o vetor no JOptionPane.showInputDialog
Object opcao = JOptionPane.showInputDialog(null,
"Selecione o curso", "Atualização de curso",
JOptionPane.QUESTION_MESSAGE, null, listaDeCursos,
listaDeCursos[0]);
final String cursoSQL = opcao.toString();//Recebe a opção informada na caixa anterior, que será o curso atualizado
// Itens do formulário de atualização
JLabel nomeL, tipoL;
final JComboBox tipoCB;
final JTextField nomeTF;
JButton cadastrar, limpar;
JPanel panel;
final JFrame frame;
/*Lista para o JComboBox*/
String[] listaTipo = { "GRADUAÇÃO", "MESTRADO", "DOUTORADO",
"TECNÓLOGO" };
nomeL = new JLabel("Nome");
nomeL.setFont(new Font("Tahoma", Font.PLAIN, 11));
nomeL.setBounds(10, 11, 27, 14);
nomeTF = new JTextField(30);
nomeTF.setBounds(47, 8, 214, 20);
nomeTF.setText(cursoSQL);//Coloca o nome da JOPane no campo 'nome'
tipoL = new JLabel("Tipo");
tipoL.setFont(new Font("Tahoma", Font.PLAIN, 11));
tipoL.setBounds(271, 11, 28, 14);
sql = "select * from curso";
sql += " where nome = " + '"' + cursoSQL + '"';
con = Conexao.getConnection();
st = (Statement) con.createStatement();
rs = (ResultSet) st.executeQuery(sql);
/**
* Aqui é que tá a parte do erro. O trecho abaixo faz o seguinte: como
* é uma atualização, o JComboBox tem que ser carregado com o tipo
* do curso que está no banco (pode ser: GRADUAÇÃO, MESTRADO, DOUTORADO,TECNÓLOGO)
* A String aux_Tipo recebe justamente isso, o tipo do curso. Se a opção não for
* 'GRADUAÇÃO' (a n° 0 do vetor) ele deve percorrer o vetor de que guarda os
* tipos de cursos e mudar a posição dessa opção pra posição 0 do vetor, já
* que quando o JComboBox é carregado, ele aparece com a posição 0 do vetor que o compõe.
* Caso essa parte seja suprimida, o codigo funcionará certo (já fiz isso), mas tem um
* grave problema, quando o formulário de Atualização de curso é carregado, sempre será
* carregado com a opção "GRADUAÇÃO"; quando o curso é de "GRADUAÇÃO", não há problemas, mas
* qdo o curso for de um outro tipo??? O usuario que quer atulizar apenas o NOME do curso
* não está preocupado com o tipo (e nem deve, pois ele foi mudar o nome e não o tipo do curso)
* Sem esse trecho, toda vez que que ele apertar o botão atualizar (desencadeia a ação de UPDATE)
* o curso em questão será setado como "GRADUAÇÃO", o que é um erro.
*
* Esse trecho do código que está lançando a exceção:
* >> Before start of result set <<
* */
String auxTipo = rs.getString("tipo");//recebe o tipo do curso
if (!auxTipo.equals("GRADUAÇÃO")) {/**Se a opção não for "GRADUAÇÃO", comuta no vetor a opção,
*com a opção 0 desse vetor;
**/
for (int i = 1; i < 4; i++) {
if (listaDeCursos[i].equals(auxTipo)) {
String aux = listaDeCursos[0];
listaDeCursos[0] = listaDeCursos[i];
listaDeCursos[i] = aux;
}
}
}
tipoCB = new JComboBox(listaTipo);
tipoCB.setBounds(309, 8, 120, 20);
panel = new JPanel();
panel.setVisible(true);
panel.setLayout(null);
// ----------------------------------------------------------------------------
// BOTÕES
cadastrar = new JButton("Atualizar");
cadastrar.setFont(new Font("Tahoma", Font.BOLD, 11));
cadastrar.setBounds(107, 39, 89, 23);
cadastrar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
boolean validar = true;// controla a validação do formulário
Curso novoCurso = new Curso();
do {
novoCurso
.setNome(nomeTF.getText().toUpperCase().trim());
novoCurso.setTipo((String) tipoCB.getSelectedItem());
if ((novoCurso.getNome().equals(""))) {
validar = false;
JOptionPane
.showMessageDialog(
null,
" Impossível completar a atualização!!!"
+ "\n Por favor informe no NOME do curso");
return;
} else {
validar = true;
}
} while (!validar);
Connection con = Conexao.getConnection();
String sql = "update curso ";
sql += "set nome = '" + novoCurso.getNome() + "', ";
sql += "tipo = '" + novoCurso.getTipo() + "' ";
sql += "where nome = " + '"' + cursoSQL + '"';
try {
Statement st = (Statement) con.createStatement();
st.executeUpdate(sql);
con.close();
JOptionPane.showMessageDialog(null, "Atualização completada com sucesso!");
} catch (SQLException e) {
String messagem = e.getMessage();
Erro erro = new Erro();
erro.grava_ERRO(messagem);
JOptionPane.showMessageDialog(null,
"Não foi possível completar a atualização!");
} catch (Exception e) {
String messagem = e.getMessage();
Erro erro = new Erro();
erro.grava_ERRO(messagem);
JOptionPane.showMessageDialog(null,
"Não foi possível completar a atulização!");
}
}
});
Espero que ajude
rs = (ResultSet) st.executeQuery(sql);
if (!rs.next())
throw new SQLException("erro ao ler o tipo do curso: " + cursoSQL);
String auxTipo = rs.getString("tipo");//recebe o tipo do curso