Requête Oracle avec Tomcat

Requête Oracle avec Tomcat - SQL/NoSQL - Programmation

Marsh Posté le 07-12-2004 à 11:03:02    

Salut !
 
Je ne parviens pas à faire accepter une requête SQL pour Oracle avec Tomcat.
 
Voici mon code:

Citation :


<%@page import="java.net.URL"%>
<%@page import="java.sql.*"%>
 
<%
 Class.forName("oracle.jdbc.driver.OracleDriver" );
 Connection con = DriverManager.getConnection ("jdbc:oracle:thin:@gssclients:1521:ORACLE","system","admin" );
 out.println("OK, the connection to the db is working" );
 
 Statement smt = con.createStatement ();
 ResultSet rs = smt.executeQuery("SELECT * FROM bouh;" );  
 ResultSetMetaData rsMeta = rs.getMetaData();
 int noCols = rsMeta.getColumnCount();
 
 out.println("<html><head><title>Oracle - connexoracle.jsp</title></head><body>" );
 out.println("<table border><tr>" );
 for (int c=1; c<=noCols; c++) {
  String el = rsMeta.getColumnLabel(c);
  out.println("<th> " + el + " </th>" );
 }
 out.println("</tr>" );
 while (rs.next()) {
  out.println("<tr>" );
  for (int c=1; c<=noCols; c++) {
   String el = rs.getString(c);
   out.println("<td> " + el + " </td>" );
  }
  out.println("</tr>" );
 }
 out.println("</table>" );
 out.println("</body></html>" );
 
 rs.close();
 smt.close();
%>


 
Il me met une erreur au niveau de la ligne
ResultSet rs = smt.executeQuery();
alors que la requête est bonne car testée dans la concole Oracle.
 
Je ne pige pas...


---------------
«Ceux qui croient que les peuples suivront leurs intérêts et non leurs passions n’ont rien compris au XXe siècle.» © Raymond Aron
Reply

Marsh Posté le 07-12-2004 à 11:03:02   

Reply

Marsh Posté le 07-12-2004 à 11:16:22    

Je connais rien à Tomcat, et pour les problèmes de config Oracle, c'est sans moi.
 
Cependant, sans le message d'erreur, je vois pas comment une personne qui s'y connaît pourrait te venir en aide efficacement ;)

Reply

Marsh Posté le 07-12-2004 à 11:19:05    

tu as raison
 

Citation :


Etat HTTP 500 -  
 
--------------------------------------------------------------------------------
 
type Rapport d'exception
 
message  
 
description Le serveur a rencontré une erreur interne () qui l'a empêché de satisfaire la requête.
 
exception  
 
javax.servlet.ServletException: ORA-00911: invalid character
 
 org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:825)
 org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:758)
 org.apache.jsp.connexoracle_jsp._jspService(connexoracle_jsp.java:85)
 org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
 
 
cause mère  
 
java.sql.SQLException: ORA-00911: invalid character
 
 oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:124)
 oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:304)
 oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:271)
 oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:622)
 oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:111)
 oracle.jdbc.driver.T4CStatement.execute_for_describe(T4CStatement.java:350)
 oracle.jdbc.driver.OracleStatement.execute_maybe_describe(OracleStatement.java:895)
 oracle.jdbc.driver.T4CStatement.execute_maybe_describe(T4CStatement.java:382)
 oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:985)
 oracle.jdbc.driver.OracleStatement.executeQuery(OracleStatement.java:1124)
 org.apache.jsp.connexoracle_jsp._jspService(connexoracle_jsp.java:53)
 org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
 
 
note La trace complète de la cause mère de cette erreur est disponible dans les fichiers journaux de Apache Tomcat/5.0.28.


---------------
«Ceux qui croient que les peuples suivront leurs intérêts et non leurs passions n’ont rien compris au XXe siècle.» © Raymond Aron
Reply

Marsh Posté le 07-12-2004 à 11:21:36    

Bon, même sans rien comprendre, vire ton ";" dans le requête, je suis sûr qu'au pire, ton message d'erreur sera différent :D
 
Quand on utilise ODBC, JDBC ou OLEDB, les ";" en fin de requête sont interdits.

Reply

Marsh Posté le 07-12-2004 à 11:30:36    

magnifique !
[:spikler]  
 
tu ne peux pas imaginer depuis combien de temps je suis sur cette page...
 
en fait, j'avais déjà essayer ça il y a qq temps
mais à ce moment j'avais d'autres erreurs
 
:jap: :jap:


---------------
«Ceux qui croient que les peuples suivront leurs intérêts et non leurs passions n’ont rien compris au XXe siècle.» © Raymond Aron
Reply

Marsh Posté le 07-12-2004 à 11:33:13    

Moi aussi j'ai bien galéré avec ça :D
 
A noter que si tu as plusieurs requêtes à passer à la suite (deux insert par exemple) tu peux par contre mettre un ";" entre les deux requête (ou un simple espace quand il s'agit de SQL Server, mais ça vient de son parseur qui est un peu bizarre ;))

Reply

Marsh Posté le 07-12-2004 à 11:36:02    

PS: Le coup des requêtes à la suite sur un même appel, c'est utile quand tu utilises une séquence par exemple :
 
"insert into matable (id, nom) values (seq.nextval, 'toto');select seq.currval from dual"
 
=> A ce moment, tu ouvre la requête comme un curseur, et tu récupère la valeur de l'id créé. Vu que les ponts de type ODBC, JDBC, OLEDB sont transactionnels, la valeur retournée est obligatoirement la valeur que tu as généré.
Tandis que si tu split ce code en deux appels depuis Java, tu ne peux pas garantir que le currval sera le même que ton nextval.

Reply

Marsh Posté le 07-12-2004 à 11:37:35    

C'est un peu fort pour moi
mais je comprends que ça puisse être utile


---------------
«Ceux qui croient que les peuples suivront leurs intérêts et non leurs passions n’ont rien compris au XXe siècle.» © Raymond Aron
Reply

Marsh Posté le 07-12-2004 à 11:45:13    

La bidouille que je t'ai indiqué pour la séquence, ça reste une bidouille hein ;) Dans tous les cas, il vaut mieu faire ça proprement. Concentre-toi là dessus ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed