JDBC und MySQL

Dieses Thema im Forum "Mac OS X Entwickler, Programmierer" wurde erstellt von moses_78, 22.08.2006.

  1. moses_78

    moses_78 Thread Starter MacUser Mitglied

    Beiträge:
    1.322
    Zustimmungen:
    22
    MacUser seit:
    08.04.2005
    Tach Zusammen,

    ich bastele z.zt. mit Java herum. Leider sind meine Versuche, mit Java
    auf die MySQL-Datenbank zuzugreifen, bis jetzt kläglich gescheitert. Ec-
    lipse meldet beim Übersetzen folgendes:
    Offensichtlich ist also die Klasse "com.mysql.jdbc.Driver" nicht installiert.
    Also habe ich mir den "MySQL Connector/J" von http://dev.mysql.com/
    downloads/ gesaugt, entpackt, und nach /System/Library/Frameworks/
    JavaVM.framework/Versions/1.5.0/Home/lib/ext kopiert.

    Meine Fragen: Habe ich die Fehlermeldung richtig interpretiert? Habe
    ich das richtige Jar an den richtigen Ort kopiert? Java sollte auf dem
    neuesten Stand sein.

    Hier noch der Code (Die Stelle mit dem Fehler markiert...):
    Code:
    import java.io.*;
    import java.sql.*;
    // import java.util.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    
    public class db extends HttpServlet 
    {
    	private static final long serialVersionUID = 1L;
    
    	public void doGet(HttpServletRequest request, HttpServletResponse response)
    	throws IOException, ServletException
        {
    		response.setContentType("text/html");
    		PrintWriter out = response.getWriter();
    
    		Connection verbindung = null;
    		Statement query = null;
    		ResultSet set = null;
    		
    		out.println("<html>");
    		out.println("<head>");
    		out.println("</head>");
    		out.println("<body>");
    		out.println("<h1>Kleines Servlet mit MySQL-Zugriff</h1>");
    				
    		try
    		{
    			Class.forName("com.mysql.jdbc.Driver"); // <-- FEHLER!
    			
    			verbindung = DriverManager.getConnection("jdbc:mysql://localhost:3306/personen", "root", "***");
    			query = verbindung.createStatement();
    			set = query.executeQuery("SELECT * FROM personen");
    			ResultSetMetaData set_daten = set.getMetaData();
    			int anz_ergebnisse = set_daten.getColumnCount();
    			
    			out.println("<h1>" + anz_ergebnisse + "</h1>");
    		}
    		finally
    		{
    			try { verbindung.close(); } catch (Exception e) {}
    			try { query.close(); } catch (Exception e) {}
    			try { set.close(); } catch (Exception e) {}
    		}
    		
         }	
    }
    Gruß Mathias
     
  2. Sojus

    Sojus MacUser Mitglied

    Beiträge:
    143
    Zustimmungen:
    3
    MacUser seit:
    30.05.2006
    ich hatte mit dem Jar über den Classpath auch probleme. Habe das Problem dann gelöst in dem ich das jar entpackt habe und den Inhat in meinen Eclipse Projektordner gepackt habe.

    mfg
     
  3. gishmo

    gishmo MacUser Mitglied

    Beiträge:
    812
    Zustimmungen:
    23
    MacUser seit:
    16.03.2004
    Leg die jar doch mal nach /Library/Java/Extensions bzw. einen Alisas dorthin, der uaf deine jar zeigt. Klappt bei Frontbase gut.

    Baust Du ein Programm, was Du später deployen willst, gehört die jar zu den anderen jars in Projekt.
     
  4. moses_78

    moses_78 Thread Starter MacUser Mitglied

    Beiträge:
    1.322
    Zustimmungen:
    22
    MacUser seit:
    08.04.2005
    So, Freunde, danke erstmal für die Tipps.

    Leider wird das benötigte Jar immer noch nicht korrekt
    eingebunden. Ich habe alles ($CATALINA_HOME, Root
    der Webapp, WEB-INF/classes, WEB-INF/libs) mit die-
    sem Jar zugepflastert, aber es funktioniert einfach nicht :(
     
  5. wegus

    wegus MacUser Mitglied

    Beiträge:
    15.040
    Zustimmungen:
    1.316
    MacUser seit:
    13.09.2004
    Die Jar-Datei gehört beim Tomcat nach

    $CATALINA_HOME/common/lib/

    dann schreibst Du in Deiner Applikation in META_INF in die context.xml einen Eintrag a la:

    PHP:
            <Resource
                    name
    ="jdbc/inUse"
                    
    auth="Container"
                    
    type="javax.sql.DataSource"
                    
    maxActive="30"
                    
    maxIdle="10"
                    
    maxWait="10000"
                    
    username="webuser"
                    
    password="secret"
                    
    driverClassName="net.sourceforge.jtds.jdbc.Driver"
                    
    url="jdbc:jtds:sqlserver://pcnt01:1433/jv23;user=webuser;password=secret" />
    Dann brauchst Du auch die Klasse nicht mehr explizit laden! Das Beispiel hier ist mit dem MS SQL-Server, es geht aber genauso für mysql auch!

    Ich such mal den link zur Apache-Doku dazu....


    EDIT:

    so gehts dann im Servlet:

    PHP:
    Context initContext = new InitialContext();
    Context envContext  = (Context)initContext.lookup("java:/comp/env");
    DataSource ds = (DataSource)envContext.lookup("jdbc/inUse");
    Connection conn ds.getConnection();

    ich ziehe es vor die Verbindung in den context der jeweiligen Anwendung zu schreiben, statt in die server.xml,
    ansonsten ist das Ganze hier beschrieben:

    http://tomcat.apache.org/tomcat-5.5-doc/jndi-datasource-examples-howto.html
     
    Zuletzt bearbeitet: 23.08.2006
  6. moses_78

    moses_78 Thread Starter MacUser Mitglied

    Beiträge:
    1.322
    Zustimmungen:
    22
    MacUser seit:
    08.04.2005
    Wegus: Vielen Dank, aber was soll ich machen,
    wenn Eclipse das Ding noch nichtmal ordentlich
    kompiliert, sondern die in #1 erwähnten Fehler-
    meldungen asuspuckt?
     
  7. wegus

    wegus MacUser Mitglied

    Beiträge:
    15.040
    Zustimmungen:
    1.316
    MacUser seit:
    13.09.2004
    weiß ich nicht, ich nehm netbeans *duck*


    Ernsthaft: Die jar-Datei muß dem CLASSPATH Deines Projektes hinzugefügt werden. Das geht bei den Projekt-Properties, soweit ich das bei Eclipse weiß!
     
  8. Sojus

    Sojus MacUser Mitglied

    Beiträge:
    143
    Zustimmungen:
    3
    MacUser seit:
    30.05.2006
    Also ich habe bei mir die *jar datei in das Verzeichnis getan auf das mein Classpath verweist. Bei meinem Win ist das: C:\Programme\Java\jre1.5.0_06\lib\ext

    kannst du natürlich auch mit eclipse einbinden aber so gehts auch.

    Dann habe ich dein Programm mal auf das reduziert:

    Code:
    import java.sql.*;
    
    public class db
    {
    	public static void main(String[] args) throws Exception{
    		Connection verbindung = null;
    		Statement query = null;
    		ResultSet set = null;
    		
    		Class.forName("com.mysql.jdbc.Driver"); 
    																			  //DB    //User  //PW
    		verbindung = DriverManager.getConnection("jdbc:mysql://localhost:3306/suem", "suem", "12345");
    		query = verbindung.createStatement();
    		set = query.executeQuery("SELECT * FROM suem");//query
    		set.next();
    		System.out.println(set.getString(1));
    	}
    }
    
    und so konnte ich problemlos auf meine DB connecten und die daten auslesen


    mfg
     
  9. moses_78

    moses_78 Thread Starter MacUser Mitglied

    Beiträge:
    1.322
    Zustimmungen:
    22
    MacUser seit:
    08.04.2005
    Habs mal auf der Kommandozeile mit Javac kompiliert. Ergebnis:
    Code:
    Exception in thread "main" java.lang.NoClassDefFoundError: db/class
    Ich kriege langsam soooooooo einen Hals....Warum
    tue ich mir dieses Java-gedöns eigentlich an?

    Weiterhin auf Hilfe hoffend, und sich für die bis jetzt
    angebotene Hilfe bedankend,
    Mathias
     
  10. Sojus

    Sojus MacUser Mitglied

    Beiträge:
    143
    Zustimmungen:
    3
    MacUser seit:
    30.05.2006
    Das ist so ein toller Java Error. Das passiert wenn man in der Konsole kompiliert. Mit eclipse passiert das nicht.

    Wenn das jar file im Classpath ist sollte es eigentlich funktionierern..........sollte ^^


    PS: Kinderleichten Mysql zugang gibts natürlich mit PHP aber da kannst du nur serverseitige Websachen machen.... und ich hasse PHP
     
    Zuletzt bearbeitet: 23.08.2006
Die Seite wird geladen...

Diese Seite empfehlen