PDA

View Full Version : [Java] Primo mini-programma


mcgeek
01-05-2013, 09:26
Salve a tutti dopo tanta teoria sono alle prese con la creazione del mio primo programmino e purtroppo il passaggio dalla teoria alla pratica non è proprio semplice.
In pratica vorrei costruire un piccolo programmino che permetta di creare un rubrica.
Ho già creato un semplicissimo database Persona con i campi nome, cognome, indirizzo, eta. Ora dovrei creare le classi java per inserire, modificare e visualizzare i dati di questo database, ma mi sto già perdendo :muro:
Qualcuno mi può dare qualche spunto su quali classi costruire e magari quali metodi e variabili dovrebbe avere ciascuna classe? :confused:
Grazie in anticipo :)

pabloski
01-05-2013, 11:04
Beh, la cosa migliore è replicare la struttura del DB, cioè una classe Persona che ha come attributi gli stessi attributi dell'entità Persona del DB.

mcgeek
02-05-2013, 07:18
Si creo la classe Persona però il mio dubbio è la connessione al database, mi conviene creare una nuova classe con i metodi per la connessione, modifica e visualizzazione dei dati o forse è meglio creare tre classi differenti una che gestisce l'inserimento dato, l'altra che gestisce la modifica e l'altra che ne gestisce la stampa a video?:mc:

pabloski
02-05-2013, 10:36
Conviene una classe sola, perchè dovresti crearne tre?

mt94
03-05-2013, 18:59
Essendo il tuo primo programma in java, ti sconsiglio vivamente di cimentarti nella connessione al database (se intendevi connetterti ad un dbms tipo access o mysql), ti consiglio di capire bene il funzionamento delle classi e programmazione OOP.

Comunque se vuoi imparare l'interfaccia con il database, ti posto il codice di una classe per la connessione.

/**
* DBMS Class 1.0
* @author Matteo Badoni
*
*/
import java.sql.*;

import javax.swing.JOptionPane;
public class Dbms
{
// Attributi della classe, per la connessione al database
Connection db;
String dbhost = ""; // Indirizzo del database, di solito è localhost
String dbuser = ""; // Username dell'utente del database
String dbpassword = ""; // Password
String dbname = ""; // Nome del database a cui connettersi

// Costruttore
public Dbms(String host, String user, String password, String name)
{
this.dbhost = host;
this.dbuser = user;
this.dbpassword = password;
this.dbname = name;
}

protected boolean connect() // Metodo che permette di connettersi al database
{
try
{
Class.forName("com.mysql.jdbc.Driver").newInstance(); // Carica il driver per la connessione
this.db = DriverManager.getConnection("jdbc:mysql://" + this.dbhost + "/" + this.dbname, this.dbuser, this.dbpassword); // Si connette al DB
return true;

}catch(Exception ex)
{
JOptionPane.showMessageDialog(null, "Errore: "+ex);
return false;
}
}

// Questo Metodo serve in caso si debba solo Proiettare o Selezionare dati, cioè una query SELECT

public ResultSet execQuery(String sql)
{
try
{
if(this.connect())
{
Statement st = (Statement) this.db.createStatement();
st.executeQuery(sql);
ResultSet rs = st.getResultSet ();
return rs;
}
else return null;
}
catch(Exception ex)
{
JOptionPane.showMessageDialog(null, "Errore: "+ex);
return null;
}
}
// Questo metodo, serve per eseguire tutte le query di manipolazione dati, INSERT DELETE ecc...
public ResultSet execUpdate(String sql)
{
try
{
if(this.connect())
{
Statement st = (Statement) this.db.createStatement();
st.executeUpdate(sql);
ResultSet rs = st.getResultSet ();
return rs;
}
else return null;
}
catch(Exception ex)
{
JOptionPane.showMessageDialog(null, "Errore: "+ex);
return null;
}
}
}

// Classe di Test

import java.sql.*;

public class test {

/**
* @param args
* @throws SQLException
*/
public static void main(String[] args) throws SQLException
{

Dbms db = new Dbms("localhost", "root", "", "test"); // Creo un oggetto di classe Dbms

ResultSet rt = db.execQuery("SELECT * FROM nome_tabella");

while(rt.next())
{
System.out.println(rt.getString("campo1"));
System.out.println(rt.getString("campo2"));
// ecc...
}
}

}



La prima parte la salvi come Dbms.java e la seconda come test.java

Questa classe funziona per mysql, modificando il driver di connessione e la stringa di connessione, può funzionare per qualsiasi DBMS.

Comunque nel caso non ti serva il database, una sola classe basta e avanza ;)