Tenere salvata la password

di il
7 risposte

Tenere salvata la password


package javadb;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;

/**
 *
 * @author valerio
 */
public class JavaDB {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws Exception {
    
        //createTable();
        //insert();
        NewJFrame n = new NewJFrame(); 
        
        
        //get();
    }
    
    public static void get() throws Exception {
        try{
            String attributo;
            int id;
            Connection conn = getConnection();
            PreparedStatement stmt = conn.prepareStatement("SELECT id, attributo FROM tablename6 WHERE id = ?");
            stmt.setString(1, "1");
            ResultSet rs = stmt.executeQuery();
            
            while(rs.next()){
                id = rs.getInt(1);
                attributo = rs.getString(2);
                System.out.println("Id = "+id+"\nAttributo = "+attributo);
            }
            stmt.close();   
            
        }catch(Exception e){
            System.out.println(e);
        }finally{
            System.out.println("Operazione riuscita!");
        }
    }
    
    public static void insert() throws Exception{
        
        final int id = 1;
        final String attributo = "Moto";
        try{
            Connection conn = getConnection();
            PreparedStatement inserted = conn.prepareStatement("INSERT INTO tablename6 VALUES (?,?)");
            inserted.setInt(1, id);
            inserted.setString(2, attributo);
            inserted.executeUpdate();
        }catch (Exception e){
            System.out.println(e);
        }finally{
            System.out.println("Inserimento completato");
        }
    }
    
    public static void createTable(String nome_entita) throws Exception{
        
        try{
            
            Connection conn = getConnection(user,pw);
            PreparedStatement create = conn.prepareStatement("CREATE TABLE ? (id number PRIMARY KEY, attributo VARCHAR2(60))");
            create.setString(1, nome_entita);
            create.executeUpdate();
        }catch(Exception e){     
            System.out.println(e);
        }finally{
            System.out.println("Funzione completata");
        }
    }
    
    public static Connection getConnection(String user, String pw) throws Exception {
       
        try{
            
            String url="jdbc:oracle:thin:@localhost:1522:Orcl";
            
            Connection conn = null;
            
            conn = DriverManager.getConnection(url,user,pw);
            System.out.println("Connesso!");
            
            return conn;
            
        }catch(Exception e){
            System.out.println("Errore: " + e);
        }
        
        return null;
Come vedete dal codice ogni volta che devo accedere al database da modificare ho bisogno di usare il nome utente e la pass (questi dati da un JFrame). Come faccio in modo che queste due stringhe siano leggibili da qualsiasi metodo? In pratica voglio due stringhe che quando posso le prendo dalla memoria e le uso

7 Risposte

  • Re: Tenere salvata la password

    giulio0 ha scritto:


    Come faccio in modo che queste due stringhe siano leggibili da qualsiasi metodo?
    No, non è che "devono essere leggibili da qualsiasi metodo". E' questione innanzitutto di "design". Hai fatto tutto con metodi static. E non è buono, detto in generale.

    Sarebbe meglio fare una classe specifica es. DatabaseConnection, che si istanzia e che incapsula user/password/url ed offre solo un getConnection(), SENZA argomenti. Poi la istanza di DatabaseConnection la si può passare ovunque serve. O se non è possibile/facile, si può anche definirla secondo il pattern "Singleton". Dipende dal contesto e dalla architettura che si vuole realizzare.
  • Re: Tenere salvata la password

    Sto rifacendo tutto con le classi come mi hai detto tu:
    
    package progetto;
    
    import java.sql.*;
    
    /**
     *
     * @author valerio
     */
    public class getConnection {
       
        
        public void connessione(String user, String pw) throws Exception{
            String url = "jdbc:oracle:thin:@localhost:1522:Orcl";
            
            try{
            Connection conn = null;
                
                conn = DriverManager.getConnection(url,user,pw);
                System.out.println("Connesso!");
            }catch (Exception e){
                System.out.println("Errore: " +e);
            }finally{
                System.out.println("fatto!");
            }
        }
        
        public void connessione(){
            String url = "jdbc:oracle:thin:@localhost:1522:Orcl";
            
            try{
            Connection conn = null;
                
                conn = DriverManager.getConnection(url,user, pass);
                System.out.println("Connesso!");
            }catch (Exception e){
                System.out.println("Errore: " +e);
            }finally{
                System.out.println("fatto!");
            }
        }
    Ho il problema che non so come dire al secondo metodo di utilizzare i parametri passati nel primo metodo (i parametri sarebbero us e pass).
    Ho pure provato a fare una sottoclasse ma non so come passare il parametro dalla superclasse ad una sottoclasse. Su internet ho trovato che dovrebbe essere queztala sintassi "super.nome_variabile" ma non funziona
  • Re: Tenere salvata la password

    Up
  • Re: Tenere salvata la password

    Non ho capito bene perché ti sei bloccato, ma non puoi fare semplicemente questo?
    public class getConnection {
        final static String URL = "jdbc:oracle:thin:@localhost:1522:Orcl"; 
        static String UTENTE = "pippo";
        static String PASSWORD = "pluto";    
        
        public void connessione(String user, String pw) throws Exception{    
            try{
                Connection conn = DriverManager.getConnection(URL,user,pw);
                UTENTE = user;
                PASSWORD = pw;
                System.out.println("Connesso!");
            }catch (Exception e){
                System.out.println("Errore: " +e);
            }finally{
                System.out.println("fatto!");
            }
        }  
     
        public void connessione() throws Exception{    
            try{
                Connection conn = DriverManager.getConnection(URL,UTENTE,PASSWORD);
                System.out.println("Connesso!");
            }catch (Exception e){
                System.out.println("Errore: " +e);
            }finally{
                System.out.println("fatto!");
            }
        }  
    }
  • Re: Tenere salvata la password

    La password e l'utente non li conosco a priori ma me li passa l'utente.
    Ho provato super() ma mi da come errore "call to super must to be first statement in constructor" e non capisc ocosa vuole
  • Re: Tenere salvata la password

    giulio0 ha scritto:


    La password e l'utente non li conosco a priori ma me li passa l'utente.
    Ho provato super() ma mi da come errore "call to super must to be first statement in constructor" e non capisc ocosa vuole
    E quindi, ripeto, dov'è che sei bloccato?
    Nel progetto iniziale sarebbe:
        final static String URL = "jdbc:oracle:thin:@localhost:1522:Orcl"; 
        static String UTENTE = "pippo";
        static String PASSWORD = "pluto";    
        
        public static Connection getConnection(String user, String pw) throws Exception {
           
            try{        
                Connection conn = DriverManager.getConnection(URL,user,pw);
                UTENTE = user;
                PASSWORD = pw;
                System.out.println("Connesso!");
                
                return conn;
                
            }catch(Exception e){
                System.out.println("Errore: " + e);
            }
            
            return null;
        }
     
        public static Connection getConnection() throws Exception {
           
            try{        
                Connection conn = DriverManager.getConnection(URL,UTENTE,PASSWORD);
                System.out.println("Connesso!");
                
                return conn;
                
            }catch(Exception e){
                System.out.println("Errore: " + e);
            }
            
            return null;
        }
  • Re: Tenere salvata la password

    giulio0 ha scritto:


    La password e l'utente non li conosco a priori ma me li passa l'utente.
    Ho provato super() ma mi da come errore "call to super must to be first statement in constructor" e non capisc ocosa vuole
    giulio0, a parte che probabilmente hai "lacune" sul fronte object-oriented, ma a parte questo, quello che dicevo io è semplice: basta "incapsulare" in un oggetto lo username/password. Incapsulare intendo: tenere come variabili di istanza.

    Quindi una classe es. Database (o come vuoi chiamarla) con:
    - campi (variabili) di istanza per username, password (e url se non lo vuoi "cablare" nella classe)
    - costruttore che riceve i dati e li assegna ai campi.
    - metodo getConnection() (SENZA parametri)

    In un punto principale della applicazione crei un oggetto Database con i dati e poi passi l'oggetto Database dove serve. Nessun'altro dovrà sapere quei dati finché gli basta invocare il getConnection().
    Se è una applicazione console/gui potrebbe bastare.

    Per il class name e il caricamento con Class.forName, se vuoi cablare questo nella Database lo puoi eseguire in un blocco di inizializzazione static (se non sai cosa è, fallo nel costruttore ..)
Devi accedere o registrarti per scrivere nel forum
7 risposte