Newsgroup: it.comp.java
Titolo: Servlet+JdbcOdbc. Aiuto !

Mi sapete dire perche' diavolo funziona male questa servlet ? Diciamo che 1
volta su 10 mi tira fuori due tipi di errori : 1- General Error. 2- ODBC -
Errore nella sequenza della funzione. Riporto di seguito il listato
incriminato. Compilata con JSDK 2.1 e fatta girare con quel serverino che
sta insieme a JSDK.
Grazie a tutti.
Oticman
***************** codice *******************
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
public class LeggiDb extends HttpServlet
 Connection con=null;
/** * Handle the HTTP GET method by building a simple web page. */
 public void doGet (HttpServletRequest request, HttpServletResponse
response)
    throws ServletException, IOException
  PrintWriter out;
  // leggo parametro di ricerca
  String ricerca = request.getParameter("ric");
        String query1;
  if(ricerca==null)
   query1 = "select * from hardware";
  else {
   query1 = "select * from hardware ";
   query1 += "where descpezzo like '"+ricerca.toUpperCase()+"%'";
   query1 += " or descpezzo like '"+ricerca.toLowerCase()+"%'";
  }
  response.setHeader("Expires", "Mon, 01 Jan 1990 00:00:00 GMT");
  response.setContentType("text/html");
  out = response.getWriter();
  out.println("<HTML><HEAD><TITLE>Elenco");
  out.println("</TITLE></HEAD><BODY bgcolor=\"#FFFFFF\" text=\"#000000\">");
  out.println("<H1> "+ricerca+" </H1>");
  out.println("<P><table border=\"0\" width=\"100%\">");
        Statement stmt=null;
  try {
   int linea=0;
   stmt = con.createStatement();
   ResultSet rs = stmt.executeQuery(query1);
   while (rs.next()) {
    String s = rs.getString("codpezzo");
    String f = rs.getString("descpezzo");
    if(linea==0) {
     out.println("<tr bgcolor=\"#B6A88B\"><td>"+s + "</td><td>" +
f+"</td><td><img src=\"../images/disp.jpg\" width=\"12\" height=\"12\"
alt=\"Disponibile\"></td></tr>");
     linea=1;
    }
    else {
     out.println("<tr bgcolor=\"#D8CAAD\"><td>"+s + "</td><td>" +
f+"</td><td><img src=\"../images/disp.jpg\" width=\"12\" height=\"12\"
alt=\"Disponibile\"></td></tr>");
     linea=0;
    }
   }
   stmt.close();
   stmt=null;
  } catch(SQLException ex) {
   System.err.println("Errore Sql: " + ex.getMessage());
  }
  out.println("</table>");
  out.println("</BODY></HTML>");
  out.close();
  }
 public void init() throws ServletException
  super.init();
        String url = "jdbc:odbc:WebRent";
        try {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        } catch(java.lang.ClassNotFoundException e) {
            System.err.print("ClassNotFoundException: ");
            System.err.println(e.getMessage());
        }
        try {
            con = DriverManager.getConnection(url, "", "");
        } catch(SQLException ex) {
            System.err.println("SQLException: " + ex.getMessage());
        }
 }
 public void destroy()
  super.destroy();
        try {
   con.close();
        } catch(SQLException ex) {
            System.err.println("SQLException: " + ex.getMessage());
        }
 }
}

Mi sa che finalmente ho risolto. Come non detto. Scusate.
O.

Come hai risolto????
Luigi
--
Posted from [194.184.157.13]
via Mailgate.ORG Server - 
http://www.mailgate.org

Ma questo messaggio e' rivolto a quello precedente mio ? se si, allora ho
semplicemente chiuso il resultset ogni fine elaborazione. he he, m'era
sfuggito. quindi lui, ogni tanto decideva di chiuderlo e quindi andava in
errore.
ciao
oticman
"Luigi Simonetti" ha scritto nel messaggio
<000401bf935a$f9c5e920$2064a8c0@simonetti>...


Farai fatica a crederlo ma e' TUTTA colpa del ponte JDBC-ODBC. La spiegazione
che mi sono dato l'anno scorso e' una pessima gestione del multithread in ODBC
(anche quando la servlet e' usata da un solo utente alla volta). Il semplice
fatto che il result set possa ottenere alcune centinaia di righe poi complica il
fatto e aumenta la probabilita' della comparsa dell'errore 'errore di
sequenza...'  -> cambia driver e il mondo sorridera' al tuo codice java.Ti
consiglio, inoltre, un _vero_ DB anche per le prove (io all'inizio usavo Access
per le prove ma ho abbandonato questa strada): mySQL e' gratis per le
piattaforme non Microsoft, altrimenti se proprio non puoi fare a meno di access
e di ODBC cerca una implementazione del 'ponte' diversa da quella distribuita
col JDK (tipo quelli della Bea WebLogic o di Kona o Iona, non ricordo bene)
almeno ti risparmi i Memory leaks. La pagina dei fornitori di driver JDBC la
trovi sul sito della sun:
http://industry.java.sun.com/products/jdbc/drivers
Spero ti sia di aiuto..
Pino
