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á
[quote=jonhzinhooo]Olá pessal do forum…
Gostaria de saber que erro é esse que retorna a messagem
[i]Before start of result set[/i]
Grato desde já[/quote]
Podes mostrar teu fonte do while, for… do loop?
O erro, claro, diz que o ponteiro está antes do primeiro registro.
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