# mysql treiber problem wenn import java.sql.* bei _servlet_



## krushy (24. Apr 2007)

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..

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 wenn ich das sql paket nicht importiere, der treiber auf einmal gefunden wird..ich kann connecten!! aber dann funktionieren halt die sql befehle nicht mehr, weil die klassen fehler..

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.

woran liegt das, kann mir vielleicht jemand helfen? weiß nicht mehr weiter.


----------



## Guest (24. Apr 2007)

```
/*
 * 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


----------



## Guest (24. Apr 2007)

Also wenn du JDBC in einem Servlet verwendest solltest du grundsätzlich eine DataSource benutzen. Schau dir am besten die Tomcat-Doku zu dem Thema an.


----------

