import java.sql.*;
import java.util.*;
import javax.swing.JOptionPane;

public class CriaConta {
    
    public static void main( String args[] ) {
        String url = "jdbc:odbc:Banco";
        Connection connection = null;
        int agencia = 0;
        
        // Cria a conexão com o banco
        try {
            Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );
            connection = DriverManager.getConnection( url );
        } catch ( ClassNotFoundException cnfex ) {
            System.err.println( "Driver JDBC/ODBC nao encontrado." );
            cnfex.printStackTrace();
            System.exit( 1 );
        } catch ( SQLException sqlex ) {
            System.err.println( "Falha na conexao." );
            sqlex.printStackTrace();
            System.exit( 1 );
        }
        
        // Cria a conta
        try {
            Statement statement = connection.createStatement();
            
            // Obtém o número da conta
            int conta = 0;
            while (conta == 0) {
                String cta = JOptionPane.showInputDialog(null,
                        "Entre com o número da conta:", "Cria Conta",
                        JOptionPane.QUESTION_MESSAGE);
                
                if (cta == null) { // botão cancel
                    statement.close();
                    connection.close();
                    System.exit(1);
                } else {
                    ResultSet resultSet = statement.executeQuery( 
                            "select conta from contas where conta = " + cta );
                    if (resultSet.next() == false) { // conta não encontrada
                        try {
                            conta = Integer.parseInt(cta.trim());
                        } catch (NumberFormatException nfe) {
                            System.err.println("Número de conta inválido.");
                        }
                    } else
                        JOptionPane.showMessageDialog(null,
                                "Conta "+ cta + " já existe.", "Cria Conta",
                                JOptionPane.ERROR_MESSAGE);
                }
            }
            
            // Obtém o nome do cliente
            String nome = JOptionPane.showInputDialog(null,
                    "Entre com o nome do cliente:", "Cria Conta",
                    JOptionPane.QUESTION_MESSAGE);
            
            if (nome == null) { // botão cancel
                statement.close();
                connection.close();
                System.exit(1);
            }
            
            // Obtém o número da agência
            String ag = JOptionPane.showInputDialog(null,
                    "Entre com o número da agencia:", "Cria Conta",
                    JOptionPane.QUESTION_MESSAGE);
            
            if (ag == null) { // botão cancel
                statement.close();
                connection.close();
                System.exit(1);
            }
            
            try {
                agencia = Integer.parseInt(ag.trim());
            } catch (NumberFormatException nfe) {
                System.err.println("Código da agência inválido.");
                statement.close();
                connection.close();
                System.exit(1);
            }
            
            // Executa a stored procedure
            statement.execute( "execute CriaConta " + conta + ", " + nome + ", " + agencia );
            
            JOptionPane.showMessageDialog(null, "Conta criada com sucesso.",
                    "Cria Conta", JOptionPane.INFORMATION_MESSAGE);
            
            // Fecha a conexão com o banco
            statement.close();
            connection.close();
            System.exit(0);
        } catch ( SQLException sqlex ) {
            sqlex.printStackTrace();
            System.exit(1);
        }
        
    }
}


