JDBC -ODBC /java.sql.SQLException:

Perhaps

Grünschnabel
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.
 
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
 
Zuletzt bearbeitet:
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

Code:
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

Code:
/*
 * 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:

Code:
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
 
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
 
Zurück