Alhazred
14-07-2008, 19.11.47
Ho dei problemi con l'istruzione "Statement stmt = conn.createStatement();" presente nel seguente codice, mi ritorna sempre una nullpointerexception e non capisco il perché, ho già usato lo stesso codice in passato su un altro progetto ed ha sempre funzionato, ho anche provato a tirarlo fuori di nuovo per vedere se magari non fosse un problema di mysql o tomacat sul pc visto che li ho reinstallati e potevo aver sbagliato qualcosa, invece il vecchio progetto funziona correttamente.
Sapreste darmi una mano?
public class AccountDAO {
public static boolean login(String username, String password)
{
try
{
ConnectionManager connection = ConnectionManager.getInstance();
Connection conn = connection.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = null;
rs = stmt.executeQuery("SELECT username, password FROM account WHERE username='"+username+"' AND password='"+password+"';");
if(rs.next() == false)
return false;
return true;
}
catch (SQLException ex)
{
System.out.println("SQLException: " + ex.getMessage());
System.out.println("SQLState: " + ex.getSQLState());
System.out.println("VendorError: " + ex.getErrorCode());
}
return false;
}
}
Questo è il ConnectionManager, lo uso su un altro progetto, cambia solo il nome del database nell'istruzione
conn = DriverManager.getConnection("jdbc:mysql://localhost/ricettelastminute?user=root&password=root");
bookshop al posto di ricettelastminute.
bookshop funziona senza problemi.
import java.sql.*;
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/ricettelastminute?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());
}
}
}
Sapreste darmi una mano?
public class AccountDAO {
public static boolean login(String username, String password)
{
try
{
ConnectionManager connection = ConnectionManager.getInstance();
Connection conn = connection.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = null;
rs = stmt.executeQuery("SELECT username, password FROM account WHERE username='"+username+"' AND password='"+password+"';");
if(rs.next() == false)
return false;
return true;
}
catch (SQLException ex)
{
System.out.println("SQLException: " + ex.getMessage());
System.out.println("SQLState: " + ex.getSQLState());
System.out.println("VendorError: " + ex.getErrorCode());
}
return false;
}
}
Questo è il ConnectionManager, lo uso su un altro progetto, cambia solo il nome del database nell'istruzione
conn = DriverManager.getConnection("jdbc:mysql://localhost/ricettelastminute?user=root&password=root");
bookshop al posto di ricettelastminute.
bookshop funziona senza problemi.
import java.sql.*;
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/ricettelastminute?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());
}
}
}