Ho fatto una piccola applicazione Java che si connette ad un Database
Access e mostra i valori (per ora solamente nome e cognome) in un Frame con delle Textbox e 2 bottoni per far scorrere i recors avanti/indietro.
Tutto sembrerebbe funzionare bene ma mi piacerebbe sapere da voi se
concettualmente sarebbe stato meglio implementare/strutturare queste 2 classi in maniare differente.
Ecco il codice:
Grazie a tutti quelli che mi daranno un consiglio.
Ciao
codice:
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
class Access extends Frame implements ActionListener {
TextField t1;
TextField t2;
public Connessione Conn1;
public Access (Connessione Conn1){
this.Conn1 = Conn1;
setLayout(null);
setBounds (30, 10, 400, 300);
setTitle (getClass().getName());
Button bEsci = new Button("Esci");
bEsci.setBounds (150, 200, 60, 40);
bEsci.addActionListener (this);
Button bAvanti = new Button("Avanti");
bAvanti.setBounds (50, 120, 60, 40);
bAvanti.addActionListener (this);
Button bIndietro = new Button("Indietro");
bIndietro.setBounds (250, 120, 60, 40);
bIndietro.addActionListener (this);
t1 = new TextField();
t1.setBounds (50, 50, 80, 20);
t2 = new TextField();
t2.setBounds (250, 50, 80, 20);
add (t1);
add (t2);
add (bAvanti);
add (bIndietro);
add (bEsci);
setVisible(true);
Conn1.Avanti(t1, t2);
}
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("Esci")) {
Conn1.Chiudi();
System.exit(0);
}
if (e.getActionCommand().equals("Avanti")) {
Conn1.Avanti(t1, t2);
}
if (e.getActionCommand().equals("Indietro")) {
Conn1.Indietro(t1, t2);
}
}
}
public class Connessione{
private static Connection con;
private static Statement st;
private static ResultSet rs;
private static String dbURL;
private int prova;
public static void main(String[] args) {
Connessione Connect = new Connessione();
Access ist = new Access(Connect);
}
Connessione (){
try{
// aggancio il driver
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e){
System.out.println("Driver non trovato");
System.exit(0);
}
try{
// mi connetto al DB soc tramite il ponte dei driver jdbc:odbc <
dbURL = "jdbc:odbc:Ark";
con = DriverManager.getConnection(dbURL);
}
catch(SQLException sql){
System.out.println("Errore connessione"); System.exit(0);
}
try {
// avviso che sto creando una query, uno statement
st = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
}
catch(SQLException s){
System.out.println("Errore creazione statement");
}
try{
// chiedo di eseguire una select il cui output venga messo // in una result table
rs = st.executeQuery("SELECT * FROM Archivio ORDER BY NOME");
}
catch(SQLException esql){
System.out.println("Errore esecuzione statement");
}
}
public void Avanti(TextField t1, TextField t2) {
try{
// finchè ci sono tuple le prelevo (fetch)
if (!rs.isLast()) {
rs.next();
t1.setText(rs.getString(1));
t2.setText(rs.getString(2));
}
}
catch(SQLException as){
System.out.println("Errore selezione dati");
}
}
public void Indietro(TextField t1, TextField t2) {
try{
// finchè ci sono tuple le prelevo (fetch)
if (!rs.isFirst()) {
rs.previous();
t1.setText(rs.getString(1));
t2.setText(rs.getString(2));
}
}
catch(SQLException as){
System.out.println("Errore selezione dati");
}
}
public void Chiudi() {
try{
// quando ho finito chiudo prima lo statement
// poi la connessione
st.close();
con.close();
}
catch(SQLException ad){
System.out.println("errore chiusura DB");
}
}
}