Registrazione in database mysql...query in java...HELP

di il
6 risposte

Registrazione in database mysql...query in java...HELP

Salve a tutti. Mi serve aiuto urgente!!! Devo effettuare un login in Java...dove l'utente può registrarsi inserendo nome e password semplicemente. E i dati devono essere memorizzati in un database mysql...ma come si fa la query in Java???devo controllare che lo stesso nome nn ci sia già sulla tabella!!!
Mi date delle semplici istruzioni per farlo funzionare??? Grazie 10000000!!!!
Mi servirebbe la connessione al database con la query che mi permette di inserirlo e controllare prima se già c è o no!!!
dai...nn mi sembra difficile...anche se nn so farlo!!!
aiutoooooooooooooo





sto impazzendo

Grazie

6 Risposte

  • Re: Registrazione in database mysql...query in java...HELP

    Andiamo per gradi, hai qualche nozione di SQL? Se la rispista è no, ti consiglio di documentarti, ad esempio qui, lavorare su un'applicazione che gestisce un DB senza conoscere SQL non è una cosa fattibile.
    Se la risposta è si, allora puoi fare come segue.
    Per verificare se un utente è già presente nel database è sufficiente fare una select sulla tabella usando nella clausola where l'username che vuoi sapere se esiste già, se la ricerca trova qualcosa allora quel nome utente è già presente nel database, altrimenti no.
    Una cosa simile si fa per l'inserimento, basta una espressione SQL che faccia una insert riferendosi alla tabella dove vuoi inserire username e password.

    Per connetterti al database puoi dare una letta a questo tutorial.

    Dopo aver effettuato la connessione al database dovrai creare un oggetto di tipo Statement per le query, così:
    Statement stmt = conn.createStatement(); //conn è la connessione che avrai creato col DB

    Poi ti servirà un oggetto di tipo ResultSet che conterrà il risultato della select, così:
    ResultSet rs = stmt.executeQuery("qui ci va l'espressione SQL per la query come se fosse una stringa");

    Ora se la select ha trovato qualcosa, questo qualcosa sarà dentro rs sotto forma di tabella, per sapere se c'è qualcosa devi controllare rs, ad esempio così:
    boolean trovato;
    if(rs.next())
    trovato = true;
    else
    trovato = false;

    se oltre a sapere se dentro rs c'è qualcosa, ti serve anche sapere cosa, allora devi usare un ciclo while del tipo:
    while(rs.next()) {
    rs.getString("nome della colonna di cui ti interessa il valore")
    //altre istruzioni che ti servono per manipolare tale dato
    }

    per fare l'insert invece devi fare così:
    int count = stmt.executeUpdate("espressione SQL che fa l'insert");
    se count è pari a 0 l'insert non ha inserito nulla, altrimenti count è pari al numero di modifiche che sono state fatte sul DB.
  • Re: Registrazione in database mysql...query in java...HELP

    Grazie. Proverò come mi hai detto!
    Il linguaggio SQL lo conosco...il mio problema era come inserirlo nel linguaggio Java.
    Grazie ancora
    ciao
  • Re: Registrazione in database mysql...query in java...HELP

    Se hai altri problemi chiedi pure
  • Re: Registrazione in database mysql...query in java...HELP

    A me non funziona. Mi esegue tutte le catch...e nn riesco a capire se si collega o no al database. La query nn la fa per niente....bo
  • Re: Registrazione in database mysql...query in java...HELP

    Ciao, per indicare che un campo non deve avere valori uguali basta settare il campo con chiave primaria nel database.
    Per il resto prova cosi:
    ******************************CODICE PER CONNESSIONE AL DATABASE **********

    import java.sql.*;

    public class Data {
    String m_DatabaseName; //percorso del database
    String m_Username; //username per collegarsi al databse d solito root
    String m_Password; //password per collegarsi al database
    String m_Tabella; //il nome della tabella del database

    int ConnectToDatabase()
    {
    //connette al database e effettua il login
    /*
    assegna qui i dati*/
    m_DatabaseName=jdbc:mysql://localhost/percorsodatabase;
    /*
    m_Username="root";
    ecc...
    */
    Connection cn;
    Statement stm;
    ResultSet rs;
    try
    {
    Class.forName("com.mysql.jdbc.Driver").newInstance();

    /*qui ti connetti al database dando il percorso del database,il nomeutente e la password di mysql
    è probabile che il percorso del database non sia chiaro:jdbc:mysql://localhost/nomedatabase*/
    cn=DriverManager.getConnection(m_DatabaseName,m_Username,m_Password);

    System.out.println("Connessione al database avvenuta con sucesso");
    stm = cn.createStatement();
    /*qui effettui il login, dove campoutente è il campo del nomeutente del database mentre
    * utente è cio che ha dato l'utente, o stesso vale per la password*/
    rs = stm.executeQuery("select from "+m_Tabella+"where campoutente=utente and campopassword=password");
    //gestisci la query qui sopra per il login modificando i dati

    if (rs.next())
    {
    System.out.println("Login avvenuto con successo");
    }
    else
    {
    System.out.println("Nomeutente o password errati");
    }

    rs.close();
    stm.close();
    cn.close();
    }
    catch(Exception x)
    {
    System.out.println(x.getMessage());
    return -1,
    }


    return 0;
    }
    }

    **********************************************************************************

    non ho gestito l'input dell'utente.
    al metodo getconnection di drivermenager viene passato come primo parametro url, m_Databasename, e il suo valore perun database mysql è:

    jdbc:mysql://localhost/percorsodatabase

    in questa riga localhost indica appunto il server su cui c'è il database, e dopo c'è il nome del database che devi modificare inserendo il tuo. Ad esempio:jdbc:mysql://localhost/C:\nomedatabase.
    Poi ancora alla funzione vengono passati altri campi come il nomeutente e la password per eseguire il loggin sul database.Quindi sono i tuoi campi.
    Se non ci sono allora inserisci al metodo solo il primo parametro.
    ... anche se con quelache piccola correzione credo dovrebbe andare
  • Re: Registrazione in database mysql...query in java...HELP

    Cosa ti dicono le catch?
    Se fatte correttamente dovrebbero darti indicazioni sul problema.
    Puoi usare una cosa di questo tipo:
    
    catch (SQLException ex) {
                System.out.println("SQLException: " + ex.getMessage()); 
                System.out.println("SQLState: " + ex.getSQLState()); 
                System.out.println("VendorError: " + ex.getErrorCode()); 
    }
    
    Hai usato un qualche connection manager per gestire la connessione al db? Hai impostato correttamente la stringa con i parametri di connessione? Devi mettere il nome del database che hai intenzione di usare, username e password. Username e password sono quelli che usi per accedere alla console di mysql, se non hai impostato nessuna password cancella dalla stringa di connessione la parte dopo &.
    L'istruzione in questione dovrebbe essere una cosa così:
    conn = DriverManager.getConnection("jdbc:mysql://localhost/nomedatabase?user=tuousername&password=tuapassword");

    Questo è il connection manager che uso io:
    
    package connection;
    import java.sql.*;
    
    /**
     * Gestisce le connessioni al database.
     * 
     * L'implementazione è basata sul pattern Singleton per garantire che nell'applicazione esista un unico oggetto di tipo
     * ConnectionManager. In tal modo viene garantita la gestione centralizzata ed univoca delle connessioni. In particolare, 
     * viene utilizzata una unica connessione, per cui gli accessi al database sono serializzati. La connessione viene 
     * inizializzata dal componente al momento della creazione dell'istanza e chiusa nel momento della sua distruzione.
     * <br>
     * <b>Nota:</b> l'implementazione deve essere raffinata per consentire la definizione dei parametri di connessione
     * in fase di inizializzazione dell'oggetto piuttosto che lasciarli "cablati" all'interno del codice. 
     * 
     * @author Stefano Cimmino
     * @version 1.0 16/01/2007
     * @see "Documento di progettazione"
     * @see "Materiale del corso di Progetto di Basi di Dati"
     * @see "Design Patterns - Erich Gamma et al."
     */
    public class ConnectionManager 
    {
    	/**
    	 * La singola istanza del ConnectionManager.
    	 */
    	private static ConnectionManager instance = null;
    	
    	/**
    	 * La connessione al database.
    	 */
    	private static Connection conn = null;
    	
    	/**
    	 * Consente di ottenere l'unica istanza della classe.
    	 *  
    	 * Il metodo è sincronizzato per gestire chiamate concorrenti da più thread.
    	 *  
    	 * @return l'unica istanza del ConnectionManager 
    	 */
    	public static synchronized ConnectionManager getInstance()
    	{
    		if (instance == null)
    			instance = new ConnectionManager();
    		
    		return instance;
    	}
    	
    	/**
    	 * Invocato al momento della distruzione dell'oggetto.
    	 *  
    	 * Rilascia la connessione creata nel momento di creazione dell'istanza dell'oggetto.
    	 */
    	protected void finalize()
    	{
    		try
    		{
    			if (conn != null)
    				conn.close();
    		}
    		catch (SQLException ex)
            {
                System.out.println("SQLException: " + ex.getMessage()); 
                System.out.println("SQLState: " + ex.getSQLState()); 
                System.out.println("VendorError: " + ex.getErrorCode()); 
            } 		
    	}
    	
    	/**
    	 * Restituisce la connessione al database.
    	 *  
    	 * @return la connessione al database 
    	 */
    	public Connection getConnection() 
    	{
    		return conn;
    	}
    		
    	/**
    	 * Costruttore della classe.
    	 *  
    	 * Il costruttore è reso privato in accordo al pattern Singleton
    	 */
    	private ConnectionManager() 
    	{
    		try
    		{
    			Class.forName("com.mysql.jdbc.Driver").newInstance();
    			conn = DriverManager.getConnection("jdbc:mysql://localhost/nomedatabase?user=root&password=root");
    		}
            catch (SQLException ex) 
            {
                System.out.println("SQLException: " + ex.getMessage()); 
                System.out.println("SQLState: " + ex.getSQLState()); 
                System.out.println("VendorError: " + ex.getErrorCode()); 
            } 
            catch (Exception ex)
            {
            	System.out.println("Exception: " + ex.getMessage());
            }
    	}
    }
    
Devi accedere o registrarti per scrivere nel forum
6 risposte