# MySQL -  ein paar Fragen ;)



## Schnitter (19. Okt 2006)

Also, ich hab die MySQl-files importiert, jetzt ein paar Fragen:

Wie connecte ich genau?    
conn = DriverManager.getConnection("jdbc:mysql://" + dbHost + ":" + dbPort + "/" + dbName, user, passwd); 
Diese Zeile versteh ich nich :-/
Ich würde gerne auf eine DB auf einem Server von Omegaspace zugreifen.
Wie müsste ich das dann genau machen?

Und: Wie führe ich Querys aus?
Die gleiche Struktur wie mit PHP, oder ist das unter Java anders? 

Wenn die Dbs von Omegacpace keine Zugriffe von aussen zulassen, gibt es kostenlose Anbieter, die sowas tun?




Danke,
MfG


----------



## SlaterB (19. Okt 2006)

was gibts denn daran nicht zu verstehen? das ist eine vorgegebe Syntax mit fünf gut zu unterscheidenen und offensichtlich benötigten Variablen,
erklär mal bitte, was man daran nicht verstehen kann? 

wenn du auf den Omegaspace-Server zugreifen willst, was immer das ist,
dann brauchst du die Omegaspace-Server-Zugangsdaten, also dbHost, dbPort usw.,
wie macht man das? hmm, dort nachfragen?

falls du noch an einem funktionierenden Java-Client bastelst,
dann netterweise besser erstmal mit einer lokalen eigenen Datenbank, 
für Code siehe Lehrbücher/ Tutorials

wie führt man Querys aus? dito: Lehrbücher/ Tutorials 
von Struktur kann man da kaum reden, SQL ist SQL,
drumherum halt irgendwas zum übertragen, 
sieht sicher in jeder Programmiersprache anders aus, aber das ist ja nebensächlich

zu kostenlosen Anbietern weiß ich persönlich nix,
kann ich mir kaum vorstellen, wer macht denn sowas?
da kann man ja gar keine Werbung einblenden


----------



## L-ectron-X (20. Okt 2006)

*verschoben*


----------



## Schnitter (20. Okt 2006)

Jetzt hab ich mal jemand aus meiner icq-liste dazu befragt.


Er hat 

```
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

    ... try {
            Connection conn = DriverManager.getConnection("jdbc:mysql
://localhost/test?user=monty&password=greatsqldb");

            // Do something with the Connection

           ....
        } catch (SQLException ex) {
            // handle any errors
            System.out.println("SQLException: " + ex.getMessage());
            System.out.println("SQLState: " + ex.getSQLState());
            System.out.println("VendorError: " + ex.getErrorCode());
        }
```
gesagt 

Jetzt: Was stimmt?
Er hat die Version 3.1.
Bei meinem Verzeichnis steht 5.0.3 dran.

Kam uns beiden etwas merkwürdig vor^^


----------



## SlaterB (20. Okt 2006)

es geht allgemein beides
http://java.sun.com/j2se/1.4.2/docs/api/java/sql/DriverManager.html

was ein bestimmter Treiber akteptiert ist eine andere Frage,
ausprobieren


----------



## Schnitter (20. Okt 2006)

Jut.

Hab mich mal umgesehen, und bin zu folgendem Code gekommen:


```
Class.forName( "com.mysql.jdbc.Driver" );
    			conn = DriverManager.getConnection( "jdbc:mysql://localhost/java?user=root&password=" ); 
    			
    			conn.createStatement();
    			result = stmt.executeQuery( "SELECT bla,blubb FROM lol" );
    			//auslesen und ausgeben
    			while( result.next() )
    			{
    				System.out.println( result.getString( "blubb"  ) );
    			}
    			//Verbindung schließen
    			if( conn != null )
    			{
    				conn.close();
    			}
    			
    		}
    		catch( ClassNotFoundException ex )
    		{
    			JOptionPane.showMessageDialog( frame, "Fehler:\n"+ex );
    		}
    		catch( SQLException ex )
    		{
    			JOptionPane.showMessageDialog( frame, "Fehler:\n"+ex );
    		}
```

Gibt allerdings eine etwas lange Fehlermeldung in der Console aus:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at source.MainFrame$1.actionPerformed(MainFrame.java:51)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)




An was liegt das?
Sollte so doch eigentlich funktionieren?


----------



## niemand (20. Okt 2006)

Es hat sich bewährt, die entsprechende Exception aufzufangen und sich detaillierte Infos anzeigen zu lassen.

Sorry, dass ich keine konkrete Lösung präsentiere.

cu


----------



## Schnitter (20. Okt 2006)

ein angehängtes 


```
catch( NullPointerException ex )
    		{
    			JOptionPane.showMessageDialog( frame, "Fehler:\n"+ex );
    		}
```

bringt aber auch nur die Ausgabe "NullPointerException" (In der Art auf jeden Fall )


----------



## SlaterB (20. Okt 2006)

na detailliert ist das doch, eine entscheidene Info fehlt aber: die Zeile in der der Fehler auftritt (51 hift nicht)

aber das ist diesmal recht offensichtlich:
stmt wird nirgendwo definiert, falschen Code kopiert?
stmt = conn.createStatement(); 

steht doch in JEDEM Beispiel (hoffentlich korrekt)..


----------



## Schnitter (20. Okt 2006)

Ok, das wars 
Danke


----------



## Schnitter (20. Okt 2006)

Noch was: gibts es unter java auch eine php ähnlcihe fuinktion mysql_num_rows() ?


----------



## Die4Me (30. Nov 2006)

Hab mir zu dieser Funktion in php selber eine Java-Methode geschrieben. sieht wie folgend aus:


```
/**
     * mysql_num_rows () - Zaehlt die zurueckgegebenen Datensaetze in einem ResultSet
     * 
     * @param   rs      ResultSet
     * @return  anz
     */
    public int mysql_num_rows (ResultSet rs)
    {
        try
        {
            int anz = 0;
            while (rs.next ())
            {
                anz++;
            }
            return anz;
        }
        catch (SQLException e)
        {
            return -1;
        }
    }
```
Funktioniert folgend.
Als erstes brauchst du ein ResultSet, welches du natürlich aus einer Anfrage beziehst.
Danach versucht diese Funktion, das ResultSet anzusprechen. Wenn dies Fehl schlägt, dann wir -1 zurück gegeben.
Wenn nicht, dann geht nimmt er sich immer das nächste Ergebnis aus dem RS, bis keins mehr vorhanden ist.
wenn dann keins mehr vorhanden ist, gibt er die Zeilen an!

Ich weiss nun nicht genau, ob es dafür eine Java-eigene Methode gibt. jedoch bin ich mit dieser bisher ganz gut gefahren.

mfg
die4me


----------

