Bom dia,
Peço mais uma vez a ajuda de vocês. Ao digitar a instrução no aplicativo abaixo, o sistema acusa erro, porém, ao acessar o BD no mysql vejo que ele executou e alterou o salário. Alguém poderia me informar aonde estou errando ? Segue a classe ResultSetTableModel1 e o aplicativo AumentaSalario.
package com.deitel.jhtp6.empregados;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.table.AbstractTableModel;
public class ResultSetTableModel1 extends AbstractTableModel
{
private Connection connection;
private Statement statement;
private ResultSet resultSet;
private ResultSetMetaData metaData;
private int numberOfRows;
//monitora o status da conexão de banco de dados
private boolean connectedToDatabase = false;
//construtor inicializa resultSet e obtém seu objeto de metadados;
//determina número de linhas
public ResultSetTableModel1( String driver, String url,
String userName, String password, String query ) throws SQLException, ClassNotFoundException
{
//carrega classe de driver do banco de dados
Class.forName( driver );
//conecta-se ao banco de dados
connection = DriverManager.getConnection(url, userName, password);
//cria statement para consultar banco de dados
statement = connection.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY );
//atualiza status de conexão de banco de dados
connectedToDatabase = true;
//configura consulta e a executa
setQuery( query );
}//fim do construtor ResultSetTableModel
//obtém a classe que representa o tipo de coluna
public Class getColumnClass( int column ) throws IllegalStateException
{
//assegura que o banco de dados conexão está disponível
if( !connectedToDatabase )
throw new IllegalStateException( "Not connected to Database" );
//determina a classe java de coluna
try
{
String className = metaData.getColumnClassName( column + 1 );
//retorna objeto Class que representa className
return Class.forName( className );
}//fim do try
catch( Exception exception )
{
exception.printStackTrace();
}//fim do catch
return Object.class;//se ocorrerem os problemas acima, assume tipo Object
}//fim do método getColumnClass
//obtém número de colunas em ResultSet
public int getColumnCount() throws IllegalStateException
{
//assegura que o banco de dados conexão está disponível
if( !connectedToDatabase )
throw new IllegalStateException("Not connected to Database");
//determina número de colunas
try
{
return metaData.getColumnCount();
}//fim do try
catch( SQLException sqlException )
{
sqlException.printStackTrace();
}//fim do catch
return 0;//se ocorrerem os problemas acima, retorna 0 para o número de colunas
}//fim do método getColumnCount
//obtém nome de uma coluna particular em ResultSet
public String getColumnName( int column ) throws IllegalStateException
{
//assegura que o banco de dados conexão está disponível
if( !connectedToDatabase )
throw new IllegalStateException( "Not connected to Database" );
//determina o nome de colunas
try
{
return metaData.getColumnName( column + 1);
}//fim do try
catch( SQLException sqlException )
{
sqlException.printStackTrace();
}//fim do catch
return "";//se ocorrerem problemas, retorna string vazia para nome de coluna
}//fim do método getColumnName
//retorna múmero de linhas em ResultSet
public int getRowCount() throws IllegalStateException
{
//assegura que o banco de dados conexão está disponível
if( !connectedToDatabase )
throw new IllegalStateException( "Not connected to Database" );
return numberOfRows;
}//fim do método getRowCount;
//obtém valor na linha e coluna particular
public Object getValueAt( int row, int column ) throws IllegalStateException
{
//assegura que o banco de dados conexão está disponível
if( !connectedToDatabase )
throw new IllegalStateException("Not connected to Database");
//obtém um valor na linha e coluna de ResultSet especificada
try
{
resultSet.absolute( row + 1 );
return resultSet.getObject( column + 1 );
}//fim do try
catch( SQLException sqlException )
{
sqlException.printStackTrace();
}//fim do catch
return "";
}//fim do método getValueAt
//configura nova string de consulta de banco de dados
public void setQuery( String query ) throws SQLException, IllegalStateException
{
//assegura que o banco de dados conexão está disponível
if( !connectedToDatabase )
throw new IllegalStateException("Not connected to Database");
//especifica consulta e a executa
//resultSet = statement.executeQuery(query);
int atualizaDados = statement.executeUpdate(query);
//obtém metadados para ResultSet
metaData = resultSet.getMetaData();
//determina o número de linhas em ResultSet
resultSet.last();//move para a última linha
numberOfRows = resultSet.getRow();//obtém número de linha
//notifica a JTable de que modelo foi alterado
fireTableStructureChanged();
}//fim do método setQuery
//fecha Statement e Connection
public void disconnectFromDatabase()
{
if( !connectedToDatabase )
return;
//fecha Statement e Connection
try
{
statement.close();
connection.close();
}//fim do try
catch( SQLException sqlException )
{
sqlException.printStackTrace();
}//fim do catch
finally//atualiza status de conexão de banco de dados
{
connectedToDatabase = false;
}//fim do finally
}//fim do método disconnectFromDatabase
}//fim da classe ResultSetTableModel
//Aumente 10% do salário base de todos os empregados comissionados com salário base
package com.deitel.jhtp6.empregados;
import java.awt.BorderLayout;
import java.awt.DisplayMode;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.sql.SQLException;
import java.util.Scanner;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JOptionPane;
import javax.swing.ScrollPaneConstants;
public class AumentaSalario extends JFrame
{
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DATABASE_URL = "jdbc:mysql://localhost/employees";
static final String USERNAME = "root";
static final String PASSWORD = "admin";
Scanner input;
String frase = JOptionPane.showInputDialog(null, "Digite a consulta");
private ResultSetTableModel1 tableModel1;
private JTextArea queryArea;
//cria o ResultSetTableModel1 tableModel1
public AumentaSalario()
{
super("Tela do resultado de consultas");
//cria o ResultSetTableModel e exibe tabela de banco de dados
try
{
input = new Scanner(frase);
tableModel1 = new ResultSetTableModel1(JDBC_DRIVER, DATABASE_URL, USERNAME, PASSWORD, frase);
//configura JTextArea em que o usuário digita consultas
queryArea = new JTextArea(frase, 3, 100);
queryArea.setWrapStyleWord(true);
queryArea.setLineWrap(true);
JScrollPane scrollPane = new JScrollPane(queryArea, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
//cria o JButton para enviar consulta
JButton submitButton = new JButton("Consulta");
//cria o Box para gerenciar o posicionamento da queryArea e do submitButton na GUI
Box box = Box.createHorizontalBox();
box.add(scrollPane);
box.add(submitButton);
//cria o delegado JTable para tableModel
JTable resultTable = new JTable(tableModel1);
//posiciona os componentes GUI no painel de conteúdo
add(box, BorderLayout.NORTH);
add(new JScrollPane(resultTable), BorderLayout.CENTER);
//cria evento ouvinte para submitButton
submitButton.addActionListener(
new ActionListener()
{
@Override//passa a consulta para modelo de tabela
public void actionPerformed(ActionEvent event)
{
try
{
tableModel1.setQuery(queryArea.getText());
}
catch(SQLException sqlException)
{
JOptionPane.showMessageDialog(null, sqlException.getMessage(), "Database error", JOptionPane.ERROR_MESSAGE);
//tenta recuperar a partir da consulta de usuário inválida executando consulta-padrão
try
{
tableModel1.setQuery(frase);
queryArea.setText(frase);
}
catch(SQLException sqlException2)
{
JOptionPane.showMessageDialog(null, sqlException2.getMessage(), "Erro no banco de dados", JOptionPane.ERROR_MESSAGE);
//assegura que a conexão de banco de dados está fechada
tableModel1.disconnectFromDatabase();
System.exit(1);
}//fim do catch interno
}//fim do catch externo
}//fim do método actionPerformed
}//fim da classe ActionListener interna
);//fim da chamada para addActionListener
setSize(500, 250);//configura o tamanho da janela
setVisible(true);
}//fim do try
catch(ClassNotFoundException classNotFound)
{
JOptionPane.showMessageDialog(null, "Driver Mysql não encontrado", "Driver não encontrato", JOptionPane.ERROR_MESSAGE);
System.exit(1);
}//fim do catch
catch(SQLException sqlException)
{
JOptionPane.showMessageDialog(null, sqlException.getMessage(), "Erro no banco de dados", JOptionPane.ERROR_MESSAGE);
//assegura que a conexão de banco de dados está fechada
tableModel1.disconnectFromDatabase();
System.exit(1);
}//fim do catch
//dispõe da janela quando o usuário fecha o aplicativo(isso sobrescreve o padrão de HIDE_ON_CLOSE
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
//assegura que a conexão de banco de dados é fechada quando usuário fecha o aplicativo
addWindowListener(
new WindowAdapter()
{
//desconecta-se do banco de dados e sai quando a janela for fechada
public void windowClosed(WindowEvent event)
{
tableModel1.disconnectFromDatabase();
System.exit(0);
}//fim do método windowClosed
}//fim da classe WindowAdapter interna
);//fim da chamada a addWindowListener
}//fim do construtor AumentaSalario
//executa o aplicativo
public static void main(String args[])
{
new AumentaSalario();
}
}