# DB-Connection zu MySQL



## hrbaer (18. Jan 2011)

Hallo,

ich versuche mich gerade an einer DB-Connection zu einer MySQL-DB.
Mein Provider (one.com) bietet mir mittels phpMyAdmin eine Oberfläche zum Erzeugen von Tabellen, etc.. Die Frage die sich mir stellt wie erzeuge ich mittels JDBC dahin eine Verbindung.

Folgender Versuch ist bis dato gescheitert:

```
try {
            	
				Class.forName("com.mysql.jdbc.Driver");
				// Setup the connection with the DB
				connect = DriverManager.getConnection("jdbc:mysql://??? (DOMAIN?)");
				statement = connect.createStatement();
				resultSet = statement.executeQuery("select * from FEEDBACK.COMMENTS");
				
				preparedStatement = connect.prepareStatement("SELECT * from antworten");
				resultSet = preparedStatement.executeQuery();

			} 
            catch (ClassNotFoundException e) {
            	System.out.println( "ClassNotFoundException: "+e );
			} 
            catch (SQLException e) {
            	System.out.println( "SQLException: "+e );
			}
            finally{
            	
            	try {
        			if (resultSet != null) {
        				resultSet.close();
        			}

        			if (statement != null) {
        				statement.close();
        			}

        			if (connect != null) {
        				connect.close();
        			}
        		} 
            	catch (Exception e) {
                	System.out.println( "Exception: "+e );
        		}

            }
```

Mein Projekt wird mit Maven gebaut, sodass ich folgende Dependency mit aufgenommen habe:
		<dependency>
		    <groupId>mysql</groupId>
		    <artifactId>mysql-connector-java</artifactId>
		    <version>5.1.14</version>
		</dependency>

Aktuell bekomme ich damit aber folgende Exception:
SQLException: java.sql.SQLException: No suitable driver
java.sql.SQLException: No suitable driver
        at java.sql.DriverManager.getConnection(DriverManager.java:545)
        at java.sql.DriverManager.getConnection(DriverManager.java:193)
        at de.web.sayhello.SayHello$CommentForm.onSubmit(SayHello.java:107)
        at org.apache.wicket.markup.html.form.Form.delegateSubmit(Form.java:1565)
        at org.apache.wicket.markup.html.form.Form.process(Form.java:958)
        at org.apache.wicket.markup.html.form.Form.onFormSubmitted(Form.java:920)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at org.apache.wicket.RequestListenerInterface.invoke(RequestListenerInterface.java:182)
        at org.apache.wicket.request.target.component.listener.ListenerInterfaceRequestTarget.processEvents(ListenerInterfaceRequestTarget.java:73)
        at org.apache.wicket.request.AbstractRequestCycleProcessor.processEvents(AbstractRequestCycleProcessor.java:92)
        at org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:1250)
        at org.apache.wicket.RequestCycle.step(RequestCycle.java:1329)
        at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1436)
        at org.apache.wicket.RequestCycle.request(RequestCycle.java:545)
        at org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:486)
        at org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:319)
        at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
        at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3393)
        at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
        at weblogic.security.service.SecurityManager.runAs(Unknown Source)
        at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2140)
        at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2046)
        at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1366)
        at weblogic.work.ExecuteThread.execute(ExecuteThread.java:200)
        at weblogic.work.ExecuteThread.run(ExecuteThread.java:172)

Habe meinen Provider auchs chon mal angeschrieben und gefragt wie der Connect aussehen müsste. Der sagte mir, dass die das nicht unterstützen. Kann das überhaupt sein? Kann ich nicht auf jede DB mittels JDBC zugreifen??

Danke im Voraus!


----------



## ARadauer (18. Jan 2011)

> SQLException: java.sql.SQLException: No suitable driver


ja du must dein jdbc mysql treiber einbinden... gibt sicher ein paar tausend tutorials die das beschreiben..



> Habe meinen Provider auchs chon mal angeschrieben und gefragt wie der Connect aussehen müsste. Der sagte mir, dass die das nicht unterstützen.


wenn du das probelm mit dem treiber gelöst hast, wirst du dich aber trotzdem nicht hinverbinden können... wenn das vom provider aus nicht geht... versuchs mal mit sqlyog



> Kann das überhaupt sein? Kann ich nicht auf jede DB mittels JDBC zugreifen??


klar kann das sein, das die db nur vom server erreichbar ist.
bei all-inkl.com ist das nicht so, da kommst du von aussen hin...

gehts gar nicht? naja gibt anscheinend so php mysql bridges nach dem kannst du mal suchen...


----------



## maki (18. Jan 2011)

Musst schon dafür sorgen dass der mysql connector ins WEB-INF/lib Verzeichnis des WARs kommt.


----------



## hrbaer (18. Jan 2011)

ARadauer hat gesagt.:


> ja du must dein jdbc mysql treiber einbinden... gibt sicher ein paar tausend tutorials die das beschreiben..


Das ist doch schon längst mit der maven dependency passiert?!



ARadauer hat gesagt.:


> wenn du das probelm mit dem treiber gelöst hast, wirst du dich aber trotzdem nicht hinverbinden können... wenn das vom provider aus nicht geht... versuchs mal mit sqlyog


Habe mir sqlyog mal installiert. Leider scheiterts jetzt an ein paar essentiellen Infos vom Provider. Habe daher mal host, user, pw und port erfragt. Wenn ich die Daten habe kann ich noch mal einen Test von meinem aktuellen Rechner starten ob ich einen DB-Zugriff hinbekomme.



ARadauer hat gesagt.:


> klar kann das sein, das die db nur vom server erreichbar ist.
> bei all-inkl.com ist das nicht so, da kommst du von aussen hin...


Danke schon mal für den Provider. Was ich mich dann aber generell frage: Wenn ein Provider schon eine DB anbietet, wieso kann ich die dann nicht auch von einem Programm aus ansprechen? Würde ich eine php-Anwendung betreiben muss das dann von dort doch auch gehen? Wir eine DB-Connection hier gänzlich anders aufgebaut?


----------



## ARadauer (18. Jan 2011)

> wieso kann ich die dann nicht auch von einem Programm aus ansprechen?


mhn naja vielleicht security. db bei webspace dabei, db nur von webspace erreichbar... musst fragen warum sie diese nicht public erreichbar machen...



> Würde ich eine php-Anwendung betreiben muss das dann von dort doch auch gehen? Wir eine DB-Connection hier gänzlich anders aufgebaut


ja grundsätzlich ist das schon anders, aber hier gehts einfach um die konfiguration der db bzw firewall einstellungen. 
das ganze ist rein eine Sache der Einstellungen..



> Leider scheiterts jetzt an ein paar essentiellen Infos vom Provider. Habe daher mal host, user, pw und port erfragt.


wird dir nicht helfen, wenn die db nicht von aussen erreichbar ist... host ist bei mir immer die domain, also wenn mein webspace auf Webdesign - Homepage Gestaltung >> Radauer | Mondsee | Salzburg | Salzkammergut | Suchmaschinen Optimierung | Grafik Design liegt, ist die db auch über diese adresse erreichbar.. user uns passwort wie wenn du über php zugreifst..


----------



## L-ectron-X (18. Jan 2011)

FAQ: http://www.java-forum.org/datenbanken/4322-no-suitable-driver-exception-mysql.html
und
byte-welt.de Wiki: Datenbankverbindung (Java) - Byte-Welt Wiki


----------



## hrbaer (18. Jan 2011)

Danke für das schnelle Feedback/Links.

Habe soweit alle Infos eingesammelt und via SQLyog ne Connection versucht zu öffnen - leider ohne Erfolg. Spricht also sehr für die These, dass die DB schlicht nicht von außen zu erreichen ist (würde sich ja auch mit der Aussage vom One-Support decken).

Dann mal anders angefragt: Welche Provider kennt/nutzt ihr um Java-Webapplikationen zu hosten (mit (JDBC)DB-Anbindung)? Oder nutzt ihr vielleicht einfach nur eine frei zugängliche Datenbank auf die ihr aus der Anwendung "verweist"?


----------



## KSG9|sebastian (18. Jan 2011)

Es gibt ja die Möglichkeit die JDBC-Verbindung z.B. über einen HTTP-Call hinzubekommen. Client -> HTTP(S) zum Webserver -> JDBC und zurück. Hier im Forum wurde sogar mal etwas in der Richtung veröffentlich, finde es aber nicht.

Ich glaub die meisten Provider machen aus Sicherheitsgründen den Zugriff von außen dicht. Da ist es wohl einfacher sich einen Managed/Root Server zu mieten.


----------



## ARadauer (18. Jan 2011)

> Welche Provider kennt/nutzt ihr um Java-Webapplikationen zu hosten


reden wir jetzt von Webanwendungen? Ich dachte zu willst von aussen auf die Datenbank... also über irgend einen Swing Client.
Also vom Server als Webanwendung sollte es kein problem sein...


one.com bietet php hosting.. da wirst du dir mit java webanwendungen schwer tun...

Was willst du überhaupt machen?


----------



## hrbaer (18. Jan 2011)

Am Ende vom Tag will ich eine Java-Web-Applikation hosten lassen.



ARadauer hat gesagt.:


> reden wir jetzt von Webanwendungen? Ich dachte zu willst von aussen auf die Datenbank... also über irgend einen Swing Client.


Das One.com nur php-Hoster ist war mir klar, aber ich dachte ich könnte die MySQL-DB nutzen, da ich bereits einen Account für eine andere (statische) Website habe. Daher auch die Anforderung wie ich aus Java an die DB von One komme. Den Swing-Client hatte ich als "Test-Tool" verstanden um einfach/konfortable prüfen zu können ob eine Connection erzeugt werden kann...

Was ich also brauche: Entweder einen Hoster der mir alles bietet (Java-Hosting + DB) oder aber zwei Hoster. Bei letzterem habe ich mir schon überlegt ob ich die Google App Engine dazu "mißbrauche" meine Anwendung "zu hosten" und suche mir einfach einen DB-Anbieter um eine von außen erreichbarer Datenbank zu beschaffen.

Bin im Grunde aber für alles offen und für jede Hilfe dankbar!


----------



## L-ectron-X (18. Jan 2011)

Soweit ich das mal probiert habe, kannst du mit einer Applikation bei all-inkl.com und auch bei 1blu.de eine DB von außen abfragen.


----------



## hrbaer (18. Jan 2011)

Also danke für die Hinweise. Habe mich aber inzwischen noch mal ein bisschen mit der Google App Engine beschäftigt. Hier kann man sich die Persistenz zwar nicht aussuchen (JDO oder JPA), aber ich finde beide ok. Von daher hat sich die Suche damit quasi erledigt...


----------



## RoNa (19. Jan 2011)

Ich mal einen externen Provider per JDBC in Swing ausprobiert. Es kann zum Teil sehr langsam sein bei vielen Datensätzen.
Die meisten Hoster erlauben nur 'localhost' als Client. Unter db4free.net - get a MySQL 5.5 Database for free kannst Du eine kostenlose DB anlegen.

Mit https://jpmdbc.dev.java.net/ kannst Du mit JDBC auf jede DB über PHP zugreifen. Es hat aber ( vor einem Jahr ) keine Prepared Statements unterstützt ( brauchst Du für JPA )

Viel Erfolg,

Robert


----------

