Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    343

    java connessione a mysql

    da un thread passato:
    http://forum.html.it/forum/showthrea...readid=1423569

    ho ripreso la clsse del buon lomio

    classe java: compil senza errori
    codice:
    package beans;
    import java.sql.*;
    import java.util.Vector;
    
    public class Database {
       private String nomeDB;       
       private String nomeUtente;   
       private String pwdUtente;    
       private String errore;     
       private Connection db;     
       private boolean connesso;   
    
       public Database(String nomeDB) { this(nomeDB, "", ""); }
    
       public Database(String nomeDB, String nomeUtente, String pwdUtente) {
          this.nomeDB = nomeDB;
          this.nomeUtente = nomeUtente;
          this.pwdUtente = pwdUtente;
          connesso = false;
          errore = "";
       }
    
       // Apre la connessione con il Database
       public boolean connetti() {
          connesso = false;
          try {
    
             // Carico il driver JDBC per la connessione con il database MySQL
             Class.forName("com.mysql.jdbc.Driver");
    
             // Controllo che il nome del Database non sia nulla
             if (!nomeDB.equals("")) {
    
                // Controllo se il nome utente va usato o meno per la connessione
                if (nomeUtente.equals("")) {
    
                   // La connessione non richiede nome utente e password
                   db = DriverManager.getConnection("jdbc:mysql://localhost/" + nomeDB);
                } else {
    
                   // La connessione richiede nome utente, controllo se necessita anche della password
                   if (pwdUtente.equals("")) {
    
                      // La connessione non necessita di password
                      db = DriverManager.getConnection("jdbc:mysql://localhost/" + nomeDB + "?user=" + nomeUtente);
                   } else {
    
    
                      db = DriverManager.getConnection("jdbc:mysql://localhost/" + nomeDB + "?user=" + nomeUtente + "&password=" + pwdUtente);
                   }
                }
    
    
                connesso = true;
             } else {
                System.out.println("Manca il nome del database!!");
                System.out.println("Scrivere il nome del database da utilizzare all'interno del file \"config.xml\"");
                System.exit(0);
             }
          } catch (Exception e) { errore = e.getMessage(); }
          return connesso;
       }
    
    
       public Vector eseguiQuery(String query) {
          Vector v = null;
          String [] record;
          int colonne = 0;
          try {
             Statement stmt = db.createStatement();     
             ResultSet rs = stmt.executeQuery(query);   
             v = new Vector();
             ResultSetMetaData rsmd = rs.getMetaData();
             colonne = rsmd.getColumnCount();
    
             while(rs.next()) {   
                record = new String[colonne];
                for (int i=0; i<colonne; i++) record[i] = rs.getString(i+1);
                v.add( (String[]) record.clone() );
             }
             rs.close();     
             stmt.close();   
          } catch (Exception e) { e.printStackTrace(); errore = e.getMessage(); }
    
          return v;
       }
    
       public boolean eseguiAggiornamento(String query) {
          int numero = 0;
          boolean risultato = false;
          try {
             Statement stmt = db.createStatement();
             numero = stmt.executeUpdate(query);
             risultato = true;
             stmt.close();
          } catch (Exception e) {
             e.printStackTrace();
             errore = e.getMessage();
             risultato = false;
          }
          return risultato;
       }
    
       // Chiude la connessione con il Database
       public void disconnetti() {
          try {
             db.close();
             connesso = false;
          } catch (Exception e) { e.printStackTrace(); }
       }
    
       public boolean isConnesso() { return connesso; }   
       public String getErrore() { return errore; }      
    }
    questo è il form index.jsp:
    codice:
         	<div class="login">
    	<form action="http://localhost:8080/javamysql/login.jsp">
    	<fieldset>
    	<legend><h2>Login</h2></legend>
    
    	<div id="loginInp">UserName: <input type="username" name="log"></div>
    	<div id="loginInp">Password: <input type="password" name="log"></div>
    	<input type="submit" value="Login" id="loginButt">
    	</fieldset>
    	</form>
    	</div>
    e questa è l'action
    codice:
    <%@page import="java.util.Vector"%>
    <%@page import="beans.Database"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta http-equiv="refresh" content="1;url=http://localhost:8080/javamysql/index.jsp">
    <link rel="stylesheet" type="text/css" href="CSS/style.css" media="all">
    <title>Attendere</title>
    </head>
    <body>
    <%
    Database db = new Database("java", "root", "ubuntu");
    db.connetti();
    
    String username = "";
    String password = "";
    Vector select = new Vector();
    
    username = request.getParameterValues("log")[0];
    password = request.getParameterValues("log")[1];
    
    String query = "SELECT * FROM `utenti` WHERE username = '"+ username +"' AND password = '"+ password +"';";
    
    select = db.eseguiQuery(query);
    if (select.size() == 0) {
    	%>
    	<script type="text/javascript">alert("Username o password errati!");</script>
    	<%
    } else {
    	session.setAttribute("loggato", true);
    	
    	String nome;
    	String[] s = null;
    	s = (String[]) select.get(0);
    	nome = s[3];
    	
    	session.setAttribute("nome", nome);
    }
    %>
    </body>
    </html>
    e mi genera il seguente errore quando la lancio...
    HTTP Status 500 -

    type Exception report

    message

    description The server encountered an internal error () that prevented it from fulfilling this request.

    exception

    org.apache.jasper.JasperException: An exception occurred processing JSP page /login.jsp at line 27

    24: String query = "SELECT * FROM `mysql`.`utenti` WHERE username = '"+ username +"' AND password = '"+ password +"';";
    25:
    26: select = db.eseguiQuery(query);
    27: if (select.size() == 0) {
    28: %>
    29: <script type="text/javascript">alert("Username o password errati!");</script>
    30: <%


    Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handle JspException(JspServletWrapper.java:510)
    org.apache.jasper.servlet.JspServletWrapper.servic e(JspServletWrapper.java:419)
    org.apache.jasper.servlet.JspServlet.serviceJspFil e(JspServlet.java:313)
    org.apache.jasper.servlet.JspServlet.service(JspSe rvlet.java:260)
    javax.servlet.http.HttpServlet.service(HttpServlet .java:717)

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    343
    scusate,ma siccome ho installato sia mysql che phpmyadmin e quest'ultimo sulla porta 81, mica puo essere che non vede il database...

  3. #3
    Utente di HTML.it L'avatar di desa
    Registrato dal
    Oct 2008
    Messaggi
    569
    Non credo sia questo il problema, ma ho notato che nella query che costruisci nella pagina di login utilizzi la stringa `utenti`, usando caratteri che non sono gli apici singoli. E' corretto?

    Sei sicura di aver postato tutte le informazioni riguardo l'errore? Mi sembra che lo stack trace sia tagliato, non vorrei che seguisse qualcos'altro.

    Ne approfitto per segnalarti due criticità che ho notato nella pagina di login.

    1)
    codice:
    username = request.getParameterValues("log")[0];
    password = request.getParameterValues("log")[1];
    Con queste istruzioni leggi direttamente dalla request i dati di autenticazione (entrambi sotto il nome "log": ma non è più sensato assegnare a ciascuno un nome diverso?), senza fare alcun controllo. Ma hai pensato a cosa succede se questi non vengono trovati?

    2)
    codice:
    select = db.eseguiQuery(query);
    if (select.size() == 0)
    Anche qua, non esegui nessun controllo sulla non-nullità del vettore "select". Se la chiamata a eseguiQuery() però va male, "select" sarà null e pertanto ti verrà generata una NullPointerException alla istruzione successiva

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    343
    ok...lo stacktrace completo è:
    HTTP Status 500 -

    type Exception report

    message

    description The server encountered an internal error () that prevented it from fulfilling this request.

    exception

    org.apache.jasper.JasperException: Exception in JSP: /login.jsp:27

    24: String query = "SELECT * FROM utenti WHERE username='"+username+"' and password= '"+password+"'";
    25:
    26: select = db.eseguiQuery(query);
    27: if (select.size() == 0) {
    28: %>
    29: <script type="text/javascript">alert("Username o password errati!");</script>
    30: <%


    Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handle JspException(JspServletWrapper.java:504)
    org.apache.jasper.servlet.JspServletWrapper.servic e(JspServletWrapper.java:393)
    org.apache.jasper.servlet.JspServlet.serviceJspFil e(JspServlet.java:314)
    org.apache.jasper.servlet.JspServlet.service(JspSe rvlet.java:264)
    javax.servlet.http.HttpServlet.service(HttpServlet .java:802)

    root cause

    java.lang.NullPointerException
    org.apache.jsp.login_jsp._jspService(login_jsp.jav a:70)
    org.apache.jasper.runtime.HttpJspBase.service(Http JspBase.java:97)
    javax.servlet.http.HttpServlet.service(HttpServlet .java:802)
    org.apache.jasper.servlet.JspServletWrapper.servic e(JspServletWrapper.java:332)
    org.apache.jasper.servlet.JspServlet.serviceJspFil e(JspServlet.java:314)
    org.apache.jasper.servlet.JspServlet.service(JspSe rvlet.java:264)
    javax.servlet.http.HttpServlet.service(HttpServlet .java:802)
    per la prima cricità capito...
    nella seconda invece coosa mi consigli di fare?

  5. #5
    Utente di HTML.it L'avatar di desa
    Registrato dal
    Oct 2008
    Messaggi
    569
    Ah ecco, adesso vedo un'altra cosa: ti riporta una NullPointerException. E probabilmente questo è proprio causato dal secondo aspetto critico che ti avevo segnalato, e cioè un errore sulla query per cui il vettore che ti è stato restituito dal metodo ha valore null.
    Ti suggerisco di aggiungere un altro "if" in questo modo:

    codice:
    . . .
    if (select == null)
    {
      // segnala che occorso un errore
    }
    else if (select.size() == 0)
    {
    %>
    . . .

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    343
    effettivamente hai ragione.....
    ora mi da l'errore sulla query:

    org.apache.jasper.JasperException: Unable to compile class for JSP

    An error occurred at line: 13 in the jsp file: /login.jsp
    Generated servlet error:
    Syntax error, insert ";" to complete BlockStatements


    org.apache.jasper.servlet.JspServletWrapper.handle JspException(JspServletWrapper.java:510)
    org.apache.jasper.servlet.JspServletWrapper.servic e(JspServletWrapper.java:375)
    org.apache.jasper.servlet.JspServlet.serviceJspFil e(JspServlet.java:314)
    org.apache.jasper.servlet.JspServlet.service(JspSe rvlet.java:264)
    javax.servlet.http.HttpServlet.service(HttpServlet .java:802)

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    343
    risolto l'errore...si collega ed accede al db....ma fa una cosa strana....ossia va nell'else mi stampa che è connesso,ma entro 2 secondi torna alla pagina index.jsp con le 2 textarea libere...
    codice:
    else 
    {
    session.setAttribute("loggato", true);
    	
    	out.println("connesso");
    	String nome;
    	String[] s = null;
    	s = (String[]) select.get(0);
    	nome = s[3];
    
    	
    	session.setAttribute("nome", nome);
    }
    grazie

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    343
    risolto tutto era nel meta l'errore

    <meta http-equiv="refresh" content="1;url=http://localhost:8080/javamysql/index.jsp">

    faceva subito il refresh


    grazie

  9. #9
    Utente di HTML.it L'avatar di desa
    Registrato dal
    Oct 2008
    Messaggi
    569
    Lieto che adesso funzioni.

    Ciao

  10. #10
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    343
    Salve, mi sorge un problema...ho riportato l'applicazione su linux
    imposto i parametri correttamente, ma va sempre in non connesso anche se i parmetri sono corretti...cosa succede
    Database db = new Database("miodb","root","ubuntu");

    if(db.connetti())
    {
    //connesso
    }

    else

    {
    // non connesso
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.