Domanda:
Qualcuno può aiutarmi a capire questo algoritmo sui database?
anonymous
2020-10-15 13:23:11 UTC
public class InserimentoRecord
{
public static void main(String args[])
{
Connection con = null; boolean errore=false;
Statement st = null;
ResultSet rs = null;
String URL="jdbc:mysql://localhost:3306/";
String user="root",db="studenti";
String password="";
try {
con=DriverManager.getConnection(URL+db,user,password);
System.out.println("Connessione al server DBMS effettuata");
String sql="INSERT INTO anagraficastudenti(Cognome, Nome,Indirizzo,CAP,città) ";
sql+="VALUES('Neri','Marco','via Po','10100','Torino')";
st=con.createStatement();
st.executeUpdate(sql);
} catch(SQLException e)
{ System.out.println(“Errore"+e); errore=true;}
if (!errore) StampaTabella(con,st,rs);
}
static void StampaTabella(Connection con, Statement st,ResultSet rs)
{ String sql="select * from anagraficastudenti";
try { st=con.createStatement();
rs=st.executeQuery(sql);
while (rs.next())
{int CodiceStudente=rs.getInt("CodiceStudente");
String Cognome=rs.getString("Cognome");
String Nome=rs.getString("Nome");
System.out.println(CodiceStudente+" "+Cognome+" "+Nome);
}
} catch (SQLException e)
{System.out.println("Query fallita "+e);}
}
Tre risposte:
?
2020-10-16 22:12:19 UTC
Allora spero, innanzitutto, che tu conosca il JDBC driver, nel caso in cui non ti ricordi a cosa serve o cos'è te lo spiego...

In pratica il JDBC è un pattern (modello) che viene utilizzato in Java per creare una connessione tra l'applicativo (web o form) e il database che può essere MySQL, PostgreSQL, ecc...



Cerco di spiegare prendi parti del tuo codice sopra:



-------------------------------------------------------------------------------------------

Connection con = null; boolean errore=false;



Statement st = null;



ResultSet rs = null;



String URL="jdbc:mysql://localhost:3306/";



String user="root",db="studenti";



String password="";



try {



con=DriverManager.getConnection(URL+db,user,password);



System.out.println("Connessione al server DBMS effettuata");

-------------------------------------------------------------------------------------------

In questa parte viene effettuata la connessione al Database MySQL. In pratica vengono dichiarate tre variabili:

• URL = che fa riferimento al percorso del server, dove l'applicativo può connettersi al DB;

• user e db, per user si intende con quale utente accedere al database (un'po' come l'autenticazione su windows) e per db si intende, il db da selezionare per fare le query;

• password = fa riferimento alla password (se c'è!) del db.

• DriverManager.getConnection() = è un metodo che permette all'applicativo di tentare la connessione al database, e quindi se tutti i dati (scritti sopra) sono corretti, la connessione viene instaurata con successo!

-------------------------------------------------------------------------------------------

String sql="INSERT INTO anagraficastudenti(Cognome, Nome,Indirizzo,CAP,città) ";



sql+="VALUES('Neri','Marco','via Po','10100','Torino')";



st=con.createStatement();



st.executeUpdate(sql);

-------------------------------------------------------------------------------------------

In questa parte viene preparata la query (spero che sai cosa sia), in pratica a dirla breve si prepara una stringa per inserire nella tabella anagraficastudenti nelle colonne(queste- Cognome, Nome,Indirizzo,CAP,città) i valori che trovi nella parantesi dopo la parola VALUES (questi - 'Neri','Marco','via Po','10100','Torino')

Poi crea uno statement, che è un interfaccia che serve ad 'interfacciarsi' con MySQL (in pratica lo puoi vedere come intermediario tra l'applicativo e MySQL). Con questa interfaccia, esegue la query tramite il comando executeUpdate e gli passa come parametro la stringa SQL che contiene tutta la query SQL da eseguire sul db.

-------------------------------------------------------------------------------------------

static void StampaTabella(Connection con, Statement st,ResultSet rs)



{ String sql="select * from anagraficastudenti";



try { st=con.createStatement();



rs=st.executeQuery(sql);



while (rs.next())



{int CodiceStudente=rs.getInt("CodiceStudente");



String Cognome=rs.getString("Cognome");



String Nome=rs.getString("Nome");



System.out.println(CodiceStudente+" "+Cognome+" "+Nome);

------------------------------------------------------------------------------------------

In questo metodo, viene scritta un'altra query (vedi variabile sql) che prende tutti i dati dalla tabella AnagraficaStudenti. Crea uno statement ed esegue la query (lo stesso procedimento che ti ho spiegato prima!). Poi entra nel ciclo while e per ogni riga che trova sul database, si salva il codiceStudente, Cognome, Nome all'interno delle rispettive variabili. Infine stampo il tutto a video.



Spero di essere stato chiaro, non mi soffermato su pezzi di codice, che mi sembrano banali da spiegare considerando che ti stai letteralmente 'buttando' su Java.



Se hai dubbi rispondimi qui sotto!
?
2020-10-15 17:03:55 UTC
Contrariamente al Muflone io l'ambiente di programmazione Java non lo conosco (né ci tengo nè mai ci tesi, come diceva quello!), però riesco a leggere di tutto se appena appena ha una sintassi ragionevole e una scrittura leggibile (con Javascript e con le stringhe che vincono gli "Obfuscated C Contest" nemmeno ci provo).



ATTENZIONE: quella che segue è la lettura (a volo d'uccello) di un ignorante, non fidarti troppo!

==============================

DICHIARAZIONE DELLA CLASSE

Vedo la definizione della classe "InserimentoRecord" priva di variabili di stato e consistente solo in due procedure: le routine dichiarate "void" non generano valori, ma compiono azioni modificando entità altrui (le istanze di "InserimentoRecord" non hanno un proprio stato).

------------------------------

public class InserimentoRecord {

  public static void main(String args[]) { ...

  }

  static void StampaTabella(Connection con, Statement st,ResultSet rs) { ...

  }

}

------------------------------

Delle due routine solo "main", dichiarata "public", è un metodo esposto e visibile; l'altra, "StampaTabella", è un metodo di servizio interno definito solo per segmentare il codice, non per esigenze di separazione.

Il codice utente, una volta creata un'istanza della classe, la attiva con

* "istanza.main(argomenti)"

==============================

DICHIARAZIONE DEL METODO ESPOSTO

Vedo la definizione della routine "main" suscettibile di un voto inferiore a cinque, per un paio di motivi: uno di progetto (aver previsto che MySql possa andar male, ma che DriverManager debba andar bene) e uno di codifica (tutti i dati come costanti locali, anche quelli che dovrebbero essere argomenti di chiamata).

==============================

DICHIARAZIONE DEL METODO INTERNO

Anche per "StampaTabella" s'impiega la stessa filosofia: MySql può andare in errore, ma non la connessione.

Probabilmente è la mia ignoranza di Java che mi nasconde qualche banalità.
?
2020-10-15 13:24:58 UTC
Anche io conosco il linguaggio Java


Questo contenuto è stato originariamente pubblicato su Y! Answers, un sito di domande e risposte chiuso nel 2021.
Loading...