java servlet + mysql treiber + seltsames problem

krushy

Grünschnabel
hallo,

seit 2 tagen plage ich mich mit einer mysql verbindung unter java herum. jetzt konnte ich endlich den fehler lokalisieren..den mysql connector habe ich richtig eingebunden, doch wird er bei mir im Sun Java Studio Enterprise 8 nur geladen und gefunden, wenn ich das java SQL Paket nicht importiere..

woran liegt das?

hier der code..

Code:
package webapp;

import java.io.*;
import java.net.*;
import java.sql.*;
import java.text.*;
import java.util.*;

import javax.servlet.*;
import javax.servlet.http.*;



....

try
{
// The newInstance() call is a work around for some
// broken Java implementations

Class.forName("com.mysql.jdbc.Driver");

Connection dbcon = DriverManager.getConnection("mysql://localhost/test?" +
"user=monty&password=greatsqldb");


...

bei Class.forName() wird mir halt eine ClassNotFoundException ausgegeben, aber der treiber bzw. die JAR liegen im CLASSPATH dir und manuell auch nochmal per hand als lib im projekt eingebunden (sehe das paket auch im projektmenu)..

nun ist mir aufgefallen, dass der treiber auch mal geladen werden kann, wenn ich bestimmte pakete (z.b. java.sql.*) nicht importiere! keine ahnung wieso, dann gehen aber halt die sql klassen nicht..

dann ist mir aufgefallen, dass das problem nur beim servlet besteht. erstelle ich eine normale java app, kann ich den treiber laden, einbinden und sql abfragen ausgeben.

FUNKTIONIERT

Code:
package javaapplication23;

import java.sql.*;

/**
 *
 * @author U433661
 */
public class Main {
    
    static public java.sql.Connection con1=null;
    
    /** Creates a new instance of Main */
    public Main() {
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        
        final String hostname = "localhost";
        final String port = "3306";
        final String dbname = "ressourcenplaner";
        final String name = "root";
        final String pw = "";
        try {
        Class.forName("com.mysql.jdbc.Driver").newInstance();
        }
        catch (Exception e) {
        }
        try {

        String url = "jdbc:mysql://" + hostname + ":" + port + "/" + dbname;
        Connection dbcon = DriverManager.getConnection(url, name, pw);
        
        Statement statement = dbcon.createStatement();
        String query = "SELECT * FROM rp_projekte ORDER BY projekt_titel";

            // Perform the query
            ResultSet rs = statement.executeQuery(query);
            // Iterate through each row of rs
            while (rs.next())
             {
                  String m_projekt_titel = rs.getString("projekt_titel");
                  String m_projekt_stunden = rs.getString("projekt_stunden");

                  System.out.println(m_projekt_titel + " " + m_projekt_stunden);
              }

        }
        catch (SQLException sqle) {
            System.out.println(sqle);

        }
        
    }
    
}

FUNKTIONIERT NICHT

Code:
/*
* mySQLServlet.java
*
* Created on 23. April 2007, 14:01
*/

import java.io.*;
import java.net.*;
import java.sql.*;

import javax.servlet.*;
import javax.servlet.http.*;

/**
*
* @author U433661
* @version
*/
public class mySQLServlet extends HttpServlet {
   
    /** Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        /* TODO output your page here
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Servlet mySQLServlet</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>Servlet mySQLServlet at " + request.getContextPath () + "</h1>");
        out.println("</body>");
        out.println("</html>");
         */
       
       doSomeMysql();
           
    }
   
    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }
   
    /** Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }
   
    /** Returns a short description of the servlet.
     */
    public String getServletInfo() {
        return "Short description";
    }
    // </editor-fold>
   
    public void doSomeMysql() {
        // TODO code application logic here
       
        final String hostname = "localhost";
        final String port = "3306";
        final String dbname = "ressourcenplaner";
        final String name = "root";
        final String pw = "";
        try {
        Class.forName("org.gjt.mm.mysql.Driver").newInstance(); // egal ob mit/ohne newInstance() oder com.mysql.jdbc.Driver
        }
        catch (Exception e) {
        }
        try {

        String url = "jdbc:mysql://" + hostname + ":" + port + "/" + dbname;
        Connection dbcon = DriverManager.getConnection(url, name, pw);
       
        Statement statement = dbcon.createStatement();
        String query = "SELECT * FROM rp_projekte ORDER BY projekt_titel";

            // Perform the query
            ResultSet rs = statement.executeQuery(query);
            // Iterate through each row of rs
            while (rs.next())
             {
                  String m_projekt_titel = rs.getString("projekt_titel");
                  String m_projekt_stunden = rs.getString("projekt_stunden");

                  System.out.println(m_projekt_titel + " " + m_projekt_stunden);
              }

        }
        catch (SQLException sqle) {
            System.out.println(sqle);

        }
       
    }
}
auch dieses beispiel geht nicht, es wird eine exception ausgeworden: java.sql.SQLException: No suitable driver

der mysql-connector-jar ist bestandteil deS JDK, sehe die klasse in den libarys die geladen werden..
 
Hallo,

du musst bei deinem Web-Projekt einen Ordner namens lib erstellen und das Jar-Archiv dort hinein kopieren. Dann sollte es eigentlich funktionieren.

MFG

zEriX
 
Hallo,

du musst bei deinem Web-Projekt einen Ordner namens lib erstellen und das Jar-Archiv dort hinein kopieren. Dann sollte es eigentlich funktionieren.

MFG

zEriX

hab den ordner im root des projektes erstellt (im studio) und in windows dann die datei reinkopiert.. aber hat keine wirkung erzielt..

außerdem sollte das paket ja schon mit dabei sein, ist jedenfalls im jdk integriert (siehe shot)
 

Anhänge

  • bsp.jpg
    bsp.jpg
    110,7 KB · Aufrufe: 51
Ich hoffe, dass ich jetzt nichts falsches sage, aber meines wissens nach ist der MySQL-Connector nicht bei dem JDK dabei. Es kann sein, dass er dort aufgelistet wird, weil du diesen in das lib/ext Verzeichnis kopiert hast.
der lib-Ordner muss sich im Web-Inf-Ordner befinden und dort muss das Jar-Archiv des Connectors drin sein.

MFG

zEriX
 
ich habe schon eine kopie von der jar datei im classpath\lib\ext abgelegt, deswegen wird sie dort auch aufgeführt.
auch wenn ich in web\web-inf\lib die jar datei reinkopiere, kommt immer noch diese exception ;(
 
als webserver habe ich schon den integrierten tomcat oder den studioserver versucht, schlägt beides halt fehl.


die dokus habe ich auch schon mal gelesen. ich sehe ja auch, dass die connector files gelesen werden, wenn ich das projekt im java studio öffne..die connector jar habe ich im classpath, oder auch manuell im projekt..er findet sie trotzdem nicht..

arbeite hier mit winxp prof
CLASSPATH liegt als umgebungsvariable auf C:\Program Files\Java\JDK1.5.0_04
im unterordner lib\ext liegt dann u.a. auch die jar..
 
Wie es aussieht hast du sie nicht richtig gelesen. Die meisten Web-Serve ignorieren den Classpath.

Wenn Sie MySQL Connector/J mit einem Anwendungsserver wie etwa Tomcat oder JBoss benutzen möchten, müssen Sie in der Herstellerdokumentation nachlesen, wie Klassenbibliotheken von Drittanbietern konfiguriert werden, da die meisten Anwendungsserver die Umgebungsvariable CLASSPATH ignorieren. Beispiele für die Konfiguration einiger J2EE-Anwendungsserver finden Sie in Abschnitt 25.3.5.2, „Connector/J mit J2EE und anderen Java-Frameworks einsetzen“. Die maßgebliche Quelle für die Konfiguration eines JDBC-Verbindungspools auf Ihrem konkreten Anwendungsserver ist jedoch dessen Dokumentation.

Sorry für die dumme Frage, aber hast du mal den Webserver neu gestartet, nachdem du das JAR-File in den lib-ordner kopiert hast.
 
Zurück