Salve!
antes de mais nada peço desculpas se o código estiver muito estranho, mas eu estou começando em Java, estava acostumado com VB.
estou fazendo um programa para testar a conexão/manipulação dos dados contidos em um banco e por enquanto tenho isso:
é bem básico mesmo.
tenho 4 classes, são elas: Co (conexão), Main, JFrame(responsável pela interface gráfica) e Registro(responsável por armazenar as variáveis).
Main
[code]package teste;
import javax.swing.JOptionPane;
//import java.sql.*;
/**
*
-
@author andre
*/
public class Main {/**
-
@param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
java.awt.EventQueue.invokeLater(new Runnable() {public void run() { new JFrame().setVisible(true); }
});
//Registros rg = new Registros();Co co = new Co();
//co.conectar();
co.fazConsulta(co.con);
//co.desconectar(co.con);
//co.nextCand(co.lista);Registros rg_1;
rg_1 = (Registros)co.lista.get(1);rg_1.getCod(); rg_1.getDatanasc(); rg_1.getNome(); rg_1.getRg(); rg_1.getSexo();
JOptionPane.showMessageDialog(null, "Cod.: " + rg_1.getCod() + "\nNome: " + rg_1.getNome() + "\nDataNasc: " + rg_1.getDatanasc() + "\nRG: " + rg_1.getRg() + "\nSexo: " + rg_1.getSexo());
//co.nextCand(co.fazConsulta(co.con), co.i);
}
}
[/code] -
Co
[code]package teste;
import java.sql.*;
import java.util.ArrayList;
import javax.swing.JOptionPane;
/**
*
-
@author andre
*/
public class Co {//Método construtor da classe
public Co() {
}
Connection con_1 = conectar();
Connection con;
ResultSet rs;
Statement stm;
Registros rg = new Registros();
ArrayList lista = new ArrayList();
String select = “SELECT * FROM teste_import”; //comando SQL
int i = 0;public Connection conectar() {
try {//Driver
Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
} catch (ClassNotFoundException e) {
JOptionPane.showMessageDialog(null, "Impossível carregar o Driver. Erro: " + e);
}
try {//Escolhe o banco de acordo com o que foi definido via Ferramentas Administrativas/Fonte ODBC
con = DriverManager.getConnection(“jdbc:odbc:selecao”);
//JOptionPane.showMessageDialog(null, “Conexão OK!”);
} catch (SQLException sqle) {
JOptionPane.showMessageDialog(null, "Não foi possível conectar ao banco. Erro: " + sqle);
}
return con;
}public void desconectar(Connection con) {
try {
con.close();
} catch (SQLException sqle) {
JOptionPane.showMessageDialog(null, "Não foi possível desconectar do banco. Erro: " + sqle);
}
//JOptionPane.showMessageDialog(null, “Desconexão OK!”);
}public ArrayList fazConsulta(Connection con) {
try {
//JOptionPane.showMessageDialog(null, "con: " + con);
stm = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
//Salva o resultado da consulta em um objeto rs
rs = stm.executeQuery(select);
while (rs.next()) {
rg = new Registros();
rg.setCod(rs.getInt(“codcand”));
rg.setNome(rs.getString(“nomecand”));
rg.setDatanasc(rs.getString(“datanasc”));
rg.setSexo(rs.getString(“sexo”));
rg.setRg(rs.getString(“rg”));
lista.add(rg);
//MessageDialog para testar se todos os códigos estão sendo passados
//JOptionPane.showMessageDialog(null, rg.getCod());
}} catch (SQLException sqle) { JOptionPane.showMessageDialog(null, "Não foi possível realizar a consulta. Erro: " + sqle); } finally { try { if (rs != null) { rs.close(); } if (stm != null) { stm.close(); } if (con != null) { con.close(); } } catch (SQLException sqle) { JOptionPane.showMessageDialog(null,"Erro:" + sqle); } } return lista;
}
public void nextCand(ArrayList lista, int i) {
Registros rg_1;
rg_1 = (Registros) lista.get(i);rg_1.getCod(); rg_1.getDatanasc(); rg_1.getNome(); rg_1.getRg(); rg_1.getSexo(); //JOptionPane.showMessageDialog(null, "oi"); JOptionPane.showMessageDialog(null, "Cod.: " + rg_1.getCod() + "\nNome: " + rg_1.getNome() + "\nDataNasc: " + rg_1.getDatanasc() + "\nRG: " + rg_1.getRg() + "\nSexo: " + rg_1.getSexo()); i += 1;
}
/*
public void prevCand(ArrayList lista, int i) {}
public void descartar() {
}public void gravar() {
}public int exibir() {
return rg.getCod();
}
*/
}
[/code]
Registros
[code]package teste;
/**
*
-
@author andre
*/
public class Registros {int codcand;
String nomecand, datanasc, sexo, rg;public Registros() {
}public void setCod(int codcand) {
this.codcand = codcand;
}public int getCod() {
return codcand;
}public void setNome(String nomecand) {
this.nomecand = nomecand;
}public String getNome() {
return nomecand;
}public void setDatanasc(String datanasc) {
this.datanasc = datanasc;
}public String getDatanasc() {
return datanasc;
}public void setSexo(String sexo) {
this.sexo = sexo;
}public String getSexo() {
return sexo;
}public void setRg(String rg) {
this.rg = rg;
}public String getRg() {
return rg;
}
}
[/code]
JFrame
[code]package teste;
import javax.swing.JOptionPane;
/**
*
-
@author andre
*/
public class JFrame extends javax.swing.JFrame {/** Creates new form JFrame */
public JFrame() {
initComponents();
}
Co co = new Co();// Iterador para passar o valor do registro a ser buscado quando usuário clicar “next”
int i = 0;/** This method is called from within the constructor to
-
initialize the form.
-
WARNING: Do NOT modify this code. The content of this method is
-
always regenerated by the Form Editor.
*/
@SuppressWarnings(“unchecked”)
//
private void initComponents() {jLabel1 = new javax.swing.JLabel();
txtCod = new javax.swing.JTextField();
conectar = new javax.swing.JButton();
desconectar = new javax.swing.JButton();
descartar = new javax.swing.JButton();
gravar = new javax.swing.JButton();
proximo = new javax.swing.JButton();
anterior = new javax.swing.JButton();
exibir = new javax.swing.JButton();setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jLabel1.setText(“código”);
txtCod.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
txtCodActionPerformed(evt);
}
});conectar.setText(“conectar”);
conectar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
conectarActionPerformed(evt);
}
});desconectar.setText(“descon.”);
desconectar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
desconectarActionPerformed(evt);
}
});descartar.setText(“descartar”);
descartar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
descartarActionPerformed(evt);
}
});gravar.setText(“gravar”);
gravar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
gravarActionPerformed(evt);
}
});proximo.setText(“próximo”);
proximo.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
proximoActionPerformed(evt);
}
});anterior.setText(“anterior”);
anterior.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
anteriorActionPerformed(evt);
}
});exibir.setText(“exibir”);
exibir.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
exibirActionPerformed(evt);
}
});javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(21, 21, 21)
.addComponent(conectar)
.addGap(18, 18, 18)
.addComponent(desconectar)
.addGap(18, 18, 18)
.addComponent(descartar)
.addGap(18, 18, 18)
.addComponent(gravar)
.addGap(18, 18, 18)
.addComponent(anterior)
.addGap(18, 18, 18)
.addComponent(proximo))
.addGroup(layout.createSequentialGroup()
.addGap(195, 195, 195)
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(txtCod, javax.swing.GroupLayout.PREFERRED_SIZE, 44, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(exibir)))
.addContainerGap(23, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(35, 35, 35)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(txtCod, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(exibir))
.addComponent(jLabel1))
.addGap(41, 41, 41)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(conectar)
.addComponent(desconectar)
.addComponent(descartar)
.addComponent(gravar)
.addComponent(anterior)
.addComponent(proximo))
.addContainerGap(30, Short.MAX_VALUE))
);pack();
}//
private void conectarActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}private void anteriorActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}private void txtCodActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}private void descartarActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
txtCod.setText(null);
txtCod.requestFocus();
}private void desconectarActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}private void proximoActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
//co.nextCand(co.lista);
//i += 1;
//JOptionPane.showMessageDialog(null, co.lista.get(i));
co.nextCand(co.fazConsulta(co.con_1), co.i);
}private void gravarActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}private void exibirActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}
/**-
@param args the command line arguments
/
/ public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new JFrame().setVisible(true);
}
});
} */
// Variables declaration - do not modify
private javax.swing.JButton anterior;
private javax.swing.JButton conectar;
private javax.swing.JButton descartar;
private javax.swing.JButton desconectar;
private javax.swing.JButton exibir;
private javax.swing.JButton gravar;
private javax.swing.JLabel jLabel1;
private javax.swing.JButton proximo;
private javax.swing.JTextField txtCod;
// End of variables declaration
}
[/code]
-
problema novo:
ao iniciar o programa exibe uma MessageDialog com os dados do registro n.0(primeira linha) do banco, depois, ao clicar em “próximo”(que chama a função nextCand da classe Co) ele mostra o registro n.1(segunda linha do banco), normal, mas ao clicar “próximo” pela segunda vez o programa fecha e gera um relatório de erro. As primeiras linhas desse relatório são:
#
# A fatal error has been detected by the Java Runtime Environment:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x7c90100b, pid=4036, tid=3660
#
# JRE version: 6.0_16-b01
# Java VM: Java HotSpot(TM) Client VM (14.2-b01 mixed mode windows-x86 )
# Problematic frame:
# C [ntdll.dll+0x100b]
#
andei pesquisando e li algum post dizendo que não é bom usar ODBC, pois tem vários bugs mesmo. Como fazer para conectar a um banco Access sem usar ODBC?(e sem comprar drivers…)
Toda e qualquer ajuda é bem-vinda, tal como críticas construtivas.
Agradeço desde já!
abraço.