Newsgroup: it.comp.java
Titolo: problemi con JDBC

Buon giorno tutti.
Già ho scritto a questo gruppo per lo stesso aiuto, ma forse sono
stato troppo vago nella descrizione del problema.
Tramite la classe sottostate ho effettuato la connessione.
public class ConnessioneDB {
	static Connection mySQLConn = null;
	static String mySQLHostName = "localhost";
	static String mySQLPort = "3306";
	static String mySQLDBName = "miodb";
	static String mySQLUserID = "root";
	static String mySQLPassword = "root";
	public ConnessioneDB() {}
	public static Connection getMySQLConn()
	{
		String dbUrl = "jdbc:mysql://" +
						mySQLHostName + ":" +
						mySQLPort + "/" +
						mySQLDBName ;
		if (ConnessioneDB.mySQLConn == null) {
			try
			{
			Class.forName("com.mysql.jdbc.Driver").newInstance();
			ConnessioneDB.mySQLConn = DriverManager.getConnection(dbUrl,
mySQLUserID,mySQLPassword);
			System.out.println("Connection with mySQL Database completed
successfully.");
			}
			catch (ClassNotFoundException ex)
			{
			System.out.println("DBConnect.getMySQLConn() -
ClassnotFoundException: " + ex);
			ConnessioneDB.mySQLConn = null;
			return null;
			}
			catch (IllegalAccessException ex)
			{
			System.out.println("DBConnect.getMySQLConn() -
IllegalAccessException: " + ex);
			ConnessioneDB.mySQLConn = null;
			return null;
			}
			catch (InstantiationException ex)
			{
			System.out.println("DBConnect.getMySQLConn() -
InstantiationException: " + ex);
			ConnessioneDB.mySQLConn = null;
			return null;
			}
			catch (SQLException ex)
			{
			System.out.println("DBConnect.getMySQLConn() - SQLException: " +
ex);
			ConnessioneDB.mySQLConn = null;
			return null;
			}
		}
	return ConnessioneDB.mySQLConn;
	}
}
La classe sopra descritta ha la funzione getMySQLConn mi ritorna la
connessione.
public class ControlloInserimentoTesto extends
javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
	private static final long serialVersionUID = 1L;
	public ControlloInserimentoTesto() {
		super();
	}
	protected void doGet(HttpServletRequest request, HttpServletResponse
response)
						throws ServletException, IOException
	{
String sql = 	"INSERT INTO stile (Pk,"+"Nome,"+"Descrizione,"+"Path)
"+"VALUE " +"(5," +"Stile5"+"DescrizioneStile5"+"PathStile5);";
Connection conn = null;
conn = ConnessioneDB.getMySQLConn();
Statement s = conn.createStatement();
s.execute(sql);
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse
response)
	throws ServletException, IOException {
		this.doGet(request, response);
	}
Mi viene visualizzato il seguente errore:
HTTP Status 500 -
--------------------------------------------------------------------------------
type Exception report
message
description The server encountered an internal error () that prevented
it from fulfilling this request.
exception
javax.servlet.ServletException: Servlet execution threw an exception
root cause
java.lang.Error: Unresolved compilation problems:
	Unhandled exception type SQLException
	Unhandled exception type SQLException
	controller.ControlloInserimentoTesto.doGet(ControlloInserimentoTesto.java:60)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
note The full stack trace of the root cause is available in the Apache
Tomcat/5.0.28 logs.
Mi potete dare una mano?

 "+"VALUE " +"(5," +"Stile5"+"DescrizioneStile5"+"PathStile5);";
Controlla questa stringa quì, se alla fine di questo pataracchio di
inutili concatenazioni viene fuori una sintassi SQL corretta (te lo
anticipo io, no).

emmeesse ha scritto:

Ho controllato e hai ragione.
Ma io credo che il problema sia nelle chiamate.
Se faccio fare tutto dalla funzione getMySQLConn nella classe
ConnessioneDB come segue:
package database;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class ConnessioneDB {
	static Connection mySQLConn = null;
	static String mySQLHostName = "localhost";
	static String mySQLPort = "3306";
	static String mySQLDBName = "mioDb";
	static String mySQLUserID = "root";
	static String mySQLPassword = "root";
	public ConnessioneDB() {}
	//public static Connection getMySQLConn()
	public static void Insert(String sql)
	{
		String dbUrl = "jdbc:mysql://" +
						mySQLHostName + ":" +
						mySQLPort + "/" +
						mySQLDBName ;
		if (ConnessioneDB.mySQLConn == null) {
			try
			{
			Class.forName("com.mysql.jdbc.Driver").newInstance();
			ConnessioneDB.mySQLConn = DriverManager.getConnection(dbUrl,
mySQLUserID,mySQLPassword);
			Statement stat = ConnessioneDB.mySQLConn.createStatement();
			stat.execute(sql);
			//Chiusura dello Statement e della Connessione.
			stat.close();
			ConnessioneDB.mySQLConn.close();
			}
			catch (ClassNotFoundException ex)
			{
				System.out.println("DBConnect.getMySQLConn() -
ClassnotFoundException: " + ex);
				ConnessioneDB.mySQLConn = null;
			}
			catch (IllegalAccessException ex)
			{
				System.out.println("DBConnect.getMySQLConn() -
IllegalAccessException: " + ex);
				ConnessioneDB.mySQLConn = null;
			}
			catch (InstantiationException ex)
			{
			System.out.println("DBConnect.getMySQLConn() -
InstantiationException: " + ex);
			ConnessioneDB.mySQLConn = null;
			}
			catch (SQLException ex)
			{
			System.out.println("DBConnect.getMySQLConn() - SQLException: " +
ex);
			ConnessioneDB.mySQLConn = null;
			}
		}
	}
}
La Insert la esegue con successo.
Il problema è quando chiamo la funzione all'interno della Servlet.
Quindi il mio problema rimane aperto.
Hai altri consigli.
Grazie in Aticipo

emmeesse ha scritto:

Ho controllato e hai ragione.
Ma io credo che il problema sia nelle chiamate.
Se faccio fare tutto dalla funzione getMySQLConn nella classe
ConnessioneDB come segue:
package database;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class ConnessioneDB {
	static Connection mySQLConn = null;
	static String mySQLHostName = "localhost";
	static String mySQLPort = "3306";
	static String mySQLDBName = "mioDb";
	static String mySQLUserID = "root";
	static String mySQLPassword = "root";
	public ConnessioneDB() {}
	//public static Connection getMySQLConn()
	public static void Insert(String sql)
	{
		String dbUrl = "jdbc:mysql://" +
						mySQLHostName + ":" +
						mySQLPort + "/" +
						mySQLDBName ;
		if (ConnessioneDB.mySQLConn == null) {
			try
			{
			Class.forName("com.mysql.jdbc.Driver").newInstance();
			ConnessioneDB.mySQLConn = DriverManager.getConnection(dbUrl,
mySQLUserID,mySQLPassword);
			Statement stat = ConnessioneDB.mySQLConn.createStatement();
			stat.execute(sql);
			//Chiusura dello Statement e della Connessione.
			stat.close();
			ConnessioneDB.mySQLConn.close();
			}
			catch (ClassNotFoundException ex)
			{
				System.out.println("DBConnect.getMySQLConn() -
ClassnotFoundException: " + ex);
				ConnessioneDB.mySQLConn = null;
			}
			catch (IllegalAccessException ex)
			{
				System.out.println("DBConnect.getMySQLConn() -
IllegalAccessException: " + ex);
				ConnessioneDB.mySQLConn = null;
			}
			catch (InstantiationException ex)
			{
			System.out.println("DBConnect.getMySQLConn() -
InstantiationException: " + ex);
			ConnessioneDB.mySQLConn = null;
			}
			catch (SQLException ex)
			{
			System.out.println("DBConnect.getMySQLConn() - SQLException: " +
ex);
			ConnessioneDB.mySQLConn = null;
			}
		}
	}
}
La Insert la esegue con successo.


 	Unhandled exception type SQLException
 > 
controller.ControlloInserimentoTesto.doGet(ControlloInserimentoTesto.java:60)
C'e' un'errore nella compilazione: Il tuo codice non compila.
Questo perche' nel codice non consideri un'eccezione di tipo "SQLException".
Piu' specificatamente, nella classe ControlloInserimentoTesto, alla riga 60.

Giambo ha scritto:

Ok, Ma se lo inserisco mi da errore.
Mi potresti mostrare come si fa?

 Mi potresti mostrare come si fa?
Probabilmente nel metodo doGet devi incapsulare le operazioni che posso 
gettare una SQLException tra try e catch:
   try {
     Statement s = conn.createStatement();
     s.execute(sql);
   } catch (SQLException e) {
     // fai qualcosa qui !
   }