# JDBC -ODBC /java.sql.SQLException:



## Perhaps (11. August 2004)

Einen schönen guten Morgen euch da draußen.

Ich habe hier mit ein  paar Schwierigkeiten zu kämpfen, 
mein Ziel ist es aus Java auf eine MYSQL Datenbank zuzugreifen.
ICh lass schon allerhand FAQ's, jedoch ohne Erfolg. 
ICh benutze NetBeans IDE 3.6, habe es aber auch schon unter Borland JBuilerX versucht. 
mein Code sieht folgender maßen aus.

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.sql.*;

public class ShowSQLTable
{
   private static final String extendStringTo14( String s )
  {

    final String sFillStrWithWantLen = "              ";
    final int    iWantLen = sFillStrWithWantLen.length();
    if( s.length() < iWantLen )
      s = (s + sFillStrWithWantLen).substring( 0, iWantLen );
    return s;

  }

  // main()
  public static void main( String[] argv )
  {

    String sDbDriver=null, sDbUrl=null, sTable=null, sUsr="root", sPwd="XX";
    if( 3 <= argv.length )

    {
      sDbDriver = argv[0];
      sDbUrl    = argv[1];
      sTable    = argv[2];
      if( 4 <= argv.length )  sUsr = argv[3];
      if( 5 <= argv.length )  sPwd = argv[4];
    }
    else
    {
     BufferedReader in = new BufferedReader(
           new InputStreamReader( System.in ) );

        System.out.println( "org.gjt.mm.mysql.Driver" );
        sDbDriver = ("org.gjt.mm.mysql.Driver");
        System.out.println( "jdbc:mysql://192.100.8.20:3306/intra" );
        sDbUrl = ( "jdbc:mysql://192.100.8.20:3306/intra" );
        System.out.println( "telefonbuch" );
        sTable = ( "telefonbuch" );

    }
    if( null != sDbDriver && 0 < sDbDriver.length() &&
        null != sDbUrl    && 0 < sDbUrl.length()    &&
        null != sTable    && 0 < sTable.length()    )
    {
      try {

Class.forName("org.gjt.mm.mysql.Driver"); 
        Connection cn = null;

        Connection con = DriverManager.getConnection   ( "jdbc:mysql://192.100.8.20:3306/intra");
        System.out.println( "telefonbuch:" );
        Statement  st = con.createStatement();

        ResultSet  rs = st.executeQuery( "select * from telefonbuch");
        ResultSetMetaData rsmd = rs.getMetaData();


        int i, n = rsmd.getColumnCount();
        for( i=0; i<n; i++ )
          System.out.print( "+---------------" );
        System.out.println( "+" );
        for( i=1; i<=n; i++ )    // Attention: first column with 1 instead of 0
          System.out.print( "| " + extendStringTo14( rsmd.getColumnName( i ) ) );
        System.out.println( "|" );
        for( i=0; i<n; i++ )
          System.out.print( "+---------------" );
        System.out.println( "+" );
        while( rs.next() )
        {
          for( i=1; i<=n; i++ )  // Attention: first column with 1 instead of 0
            System.out.print( "| " + extendStringTo14( rs.getString( i ) ) );
          System.out.println( "|" );
        }
        for( i=0; i<n; i++ )
          System.out.print( "+---------------" );
        System.out.println( "+" );
        rs.close();
        st.close();
        cn.close();
      } 
       catch( SQLException ex ) {
        System.out.println( ex );
      }
    }
  }
} 

Problem: 
Wie schon oben erwähnt habe ich es mit zwei verschiedenen IDE's versucht.
Bei Borland lass ich dass es beim JBuilderX nicht angeboten wird über JDBC auf MYSQL zuzugreifen. 
Drum versuchte ich es mit NetBeans. Jedoch erscheint dort der Fehler beim class.forname. welches ich rot kennzeichnete.(java.lang.string)
Der von mir angegebene Treiber baut die Verbindung auf. Welches ich im dort vorhanden DriverManager testen konnte. jedoch scheint es einfach nicht im Script zu gelingen. 
Wenn jemand eine Idee oder noch fragen hat, bedanke ich mich im voraus für euer hilfe.


----------



## Thomas Darimont (11. August 2004)

Hallo!

Du meust den MySQL Datenbanktreiber (die Jar Datei die du wahrscheinlich heruntergeladen hast, wenn nicht -> http://dev.mysql.com/downloads/connector/j/3.1.html )
in den Classpath mit Aufnehmen. (Geht im JBuilder IMHO über externe Lib hinzufügen oder so... eben gleich auch Netbeans )

Gruß Tom


----------



## Perhaps (11. August 2004)

Hallo tom, 

ich danke dir für deine schnelle Antwort, 
den von dir erwähnten Treiben habe ich schon heruntergeladen,
ich  habe mich noch einmal erkundigt und erfahren das man unter NetBeans/tolls/options  Treiber (mm.mysql-2.0.12-bin.jar)einbinden kann. Dieses tat ich dann auch, 
jedoch werde ich nicht schlüssig aus dem von mir zuvor genannten Fehler
Class.forName("org.gjt.mm.mysql.Driver");. Wieso zeigt er mir an dieser stelle immer einen Fehler an?
Du sprachst auch vom einbinden des Classpath. 
laut Hilfe von Netbeans ist dies wohl nicht direkt im Script möglich, 
kann dies überhaupt angegeben  oder müsste man dies zuvor per Dos eingabe deklariert werden?
Für eine klärung dieses Problem wäre ich dir sehr dankbar denn ich sitze nun schon seit geraumer Zeit davor und nun ja, du weist es sicherlich selbst, macht sich dort schon jenes trotzgefühl breit. 

p.s. In einer FAQ lass ich dass der Treiber genau mit diesem Befehl 
Class.forName("org.gjt.mm.mysql.Driver");.  geladen.


MFG 
Perhaps


----------



## Thomas Darimont (11. August 2004)

Hallo!

Dieser mm.my... 2.0 Treiber ist UR-Alt.... besorg dir mal einen aktuellen  (3.x)
Hier mal der Weg um mit Netbeans 3.6 ein Beispiel Projekt mit Datenbank -anbindung  aufzusetzen ...

Beispiel Umgebung (Win 2000, MySQL 4.1, JDK5.0)

Wir testen ob MySQL lauffähig ist:
Beispielinstallation unter c:\mysql

Wir öffnen ein neues Dos-Fenster und geben 
mysql 
ein.

Wenn wir etwas in der Art wie 


```
C:\mysql\bin>mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 4.1.3b-beta-nt-max

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
```

sehen ist mysql aktiv.

Wir laden uns nun mal den aktuellen MySQL JDBC Treiber herunter:
http://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-3.1.3-beta.zip/from/pick

Und entpacken die Datei mysql-connector-java-3.1.3-beta-bin.jar


Ins Verzeichnis (u.U. anlegen) c:\jdbc\mysql

Wir starten nun Netbeans 3.6.

Dann gehen wir im Menü auf Project -> Project Manager
-> Add -> Als Namen vergeben wir "MySQL Project".

Nun binden wir den MySQL JDBC Treiber ein:
Rechte Maustaste auf FileSystems -> Customize -> Java Libraries
-> Rechte Maustaste -> New -> Archive Files -> MySQL JDBC Treiber.jar auswählen ...

Dann legen wir unsere Testklasse an:

Im FileSystems View:

Rechte Maustaste auf FileSystems
Mount -> Dictionary
Neues Verzeichnis erstellen (Icon oben rechts)
Zbsp: c:\nbtest

Den erstellten Ordner auswählen und Finish.

Auf NBTest mit der rechten Maustaste und New -> Java Main Class -> 
Als Namen vergeben wir hier einfach Main. ->Finish


```
/*
 * Main.java
 *
 * Created on 11. August 2004, 21:31
 */
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import java.sql.SQLException;

/**
 *
 * @author  Administrator
 */
public class Main {
    
    /** Creates a new instance of Main */
    public Main() {
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        
        //Datenbanktreiber laden
        try{
            Thread.currentThread().getContextClassLoader().loadClass("com.mysql.jdbc.Driver").newInstance();
        }catch(ClassNotFoundException cnfe){
            cnfe.printStackTrace();
        }catch(InstantiationException ie){
            ie.printStackTrace();
        }catch(IllegalAccessException iae){
            iae.printStackTrace();
        }
        
        try{
            //Verbindung aufbauen
            Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/mysql", "root", "");
            
            Statement stmt = con.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT * FROM USER;");
            
            ResultSetMetaData rsmd = rs.getMetaData();
            int clmCnt = rsmd.getColumnCount();
            
            while(rs.next()){
                for(int i = 1 ; i<= clmCnt; i++){
                    System.out.print(rs.getString(i) + " ");
                }
                System.out.println();
            }
            
            rs.close();
            con.close();
            
        }catch(SQLException se){
            se.printStackTrace();
        }
    }
}
```

Kompilieren (Icon mir dem Blatt Papier und denn vielen 0101010...)
Dann ausführen ... (Grüner Pfeil)

Ausgabe:


```
localhost root  Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y     0 0 0 
% root  Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y     0 0 0 
localhost   Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y     0 0 0 
%   N N N N N N N N N N N N N N N N N N N N N     0 0 0
```

HTH

Gruß Tom


----------



## Perhaps (12. August 2004)

*Rückmeldung*

super sache, bin leider nicht so versiert in sachen Java, deshalb um so mehr dank für Leute die die Zeit aufbringen anderen   Hilfe anzubieten und erklären zu liefern.
bis demnächst

MFG
Perhaps


----------

