Was ist falsch?

Status
Nicht offen für weitere Antworten.

gote

Mitglied
Ich will ein Programm schreiben (im Moment Konsole und später in AWT) das PMs aus einer MySql Datenbank abfragt. Aber was ist an dem code falsch? er kann den treiber nicht finden. ich weiss nicht ob auch irgendwas daran falsch ist das das mysql online steht.im moment ist das eine betaversion die bundesländer einwoghner anzeigt. es geht mir nur um die richtige datenbankanbindung. hier der code:

Code:
//Java-Applikation mit Datenbankzugriff
import java.sql.*;

public class VocamusPM {
  public static void main (String args[])  {


    // Treiber laden 
    try  {
       Class.forName("com.mysql.jdbc.Driver");
    } 
    catch (Exception e)  {
       System.out.println("JDBC/ODBC-Treiber konnte nicht geladen werden.");
       return;
    }

    // Verbindung zu Datenbank aufbauen
    Statement  befehl     = null;
    Connection verbindung = null;
    try  {
       verbindung = DriverManager.getConnection (
                      "mysql.lima-city.de",
                      "derusername",
                      "meinpw");
       befehl = verbindung.createStatement();
    } 
    catch (Exception e)  {
       System.err.println("Verbindung zu konnte nicht hergestellt werden");
    }

    // Daten auslesen
    try {
       ResultSet datenmenge;
       datenmenge = befehl.executeQuery("SELECT * FROM bndlaender ORDER BY Bundesland;");

       // Überschriften ausgeben
       System.out.println();
       System.out.println("  Bundesland \t   Einwohner (in Mio) ");
       System.out.println();

       // Einzelne Datensätze ausgeben
       String land;
       int    einw;

       while(datenmenge.next())  {
         land = datenmenge.getString("Bundesland");
         einw = datenmenge.getInt("Einw (in Mio)");
         System.out.println("  "+land+" \t\t "+einw);
       }
  
       verbindung.close();
    }
    catch (Exception e) {
       e.printStackTrace();
    }
  }
}
 

Xandro

Bekanntes Mitglied
Der Pfad zur MySQL-Connector-Treiberklasse ist falsch.

Probier mal folgendes:

Code:
Class.forName("org.gjt.mm.mysql.Driver");
 

gote

Mitglied
So, ich bin weiter, jetzt hat er Stress mit MySQL. Was ist jetzt wieder am Löschenbefehl falsch?

Code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.sql.*;


public class VocamusPM extends JFrame
{




VocamusPM(String titel)
{
super(titel);


setLayout(new FlowLayout());


setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);


}



public static void main (String args[])  {
	
	 VocamusPM fenster = new VocamusPM("Vocamus PM");
	 fenster.pack();
	 fenster.setSize(300,75);
	 fenster.setVisible(true);

}
	 public void paint(Graphics g) {
	 
    // Treiber laden 
    try  {
       Class.forName("com.mysql.jdbc.Driver");
    } 
    catch (Exception e)  {
       System.out.println("JDBC/ODBC-Treiber konnte nicht geladen werden.");
       return;
    }

    // Verbindung zu Datenbank aufbauen
    Statement  befehl     = null;
    Connection verbindung = null;
    try  {
       verbindung = DriverManager.getConnection (
                      "jdbc:mysql://mysql.lima-city.de/DB199576841",
                      "MeinUsername",
                      "MeinPasswort");
       befehl = verbindung.createStatement();
    } 
    catch (Exception e)  {
       System.err.println("Verbindung zu konnte nicht hergestellt werden");
    }

    // Daten auslesen
    try {
       ResultSet datenmenge;
       datenmenge = befehl.executeQuery("SELECT * FROM PM ORDER BY Name;");

       // Überschriften ausgeben
       g.drawString("  An \t  Betreff \t Von \t ID",20,100);

       // Einzelne Datensätze ausgeben
       String name;
       String betreff;
       String von;
       int id;
       int nummer;
       String abgefragt;

       while(datenmenge.next())  {
         name = datenmenge.getString("Name");
         betreff = datenmenge.getString("Betreff");
         von = datenmenge.getString("Von");
         id = datenmenge.getInt("ID");
         nummer = datenmenge.getInt("Nummer");
         abgefragt = datenmenge.getString("Abgefragt");
         
         
        while (abgefragt == "n") {
        	int höhe = 250;
        	datenmenge = befehl.executeQuery("UPDATE PM Set Abgefragt = 'n' WHERE Abgefragt = 'n';");
            g.drawString("  " + name + "\t" + betreff + "\t" + von + "\t" + id,20,höhe);
            datenmenge = befehl.executeQuery("DELETE FROM PM WHERE Abgefragt=j;");            
            höhe += 20;
        }

       }
  
       verbindung.close();
    }
    catch (Exception e) {
       e.printStackTrace();
    }
  }

}
 
R

Roar

Gast
du meine güte! in der paint() methode MALT man. ich hab zwar schon einiges gesehen, aber ne sql abfrage in der paint() ... :D
es reicht doch auch wenn die3 abfrage einmal ausgeführt wird, und nicht jedesmal wenn man das fenster resized, oder? :)
außerdem schau nochmal in der faq wie man strings vergleicht :!:
 

gote

Mitglied
ich muss die abfragen doch so machen, sonst gehen doch die variebalen verloren weil die lokal sind.
 
R

Roar

Gast
speicher die daten halt zwischen, als instanzvariable, was du da machst is quark. hast du mal dein fenster resized und geguckt wioe lang das dauert bis sich die gui wieder aufgebaut hat? ;)
 

gote

Mitglied
nathürlich ist das schwachsinn. der gibt nen error in der console aus und öffnet ein leeres fenster. ich versuch das mit ner klasse zu regeln.
 

gote

Mitglied
also, ich hab das jetzt geändert auf folgendes:

Code:
import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.sql.*;


public class VocamusPM extends JFrame 
{ 


VocamusPM(String titel) 
{ 
super(titel); 


setLayout(new FlowLayout()); 


setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 


} 


public static void main (String args[])  { 
    
    VocamusPM fenster = new VocamusPM("Vocamus PM"); 
    fenster.pack(); 
    fenster.setSize(300,75); 
    fenster.setVisible(true); 


 
    } 

public void paint(Graphics g) {

	
	MySQL.verbinden();
	MySQL.auslesen();

	
}

}

und die Class MySQL:

Code:
import java.sql.*;
import java.awt.*;
 


public class MySQL {

	String name; 
	String betreff; 
	String von; 
	int id; 
	int nummer; 
	String abgefragt;
	
	
	MySQL() {

		

	}
	
	
	
	public static void verbinden() {
		
	    // Treiber laden 
	    try  { 
	       Class.forName("com.mysql.jdbc.Driver"); 
	    } 
	    catch (Exception e)  { 
	       System.out.println("JDBC/ODBC-Treiber konnte nicht geladen werden."); 
	       return; 
	    } 

	    // Verbindung zu Datenbank aufbauen 
	    Statement  befehl     = null; 
	    Connection verbindung = null; 
	    try  { 
	       verbindung = DriverManager.getConnection ( 
	                      "jdbc:mysql://mysql.lima-city.de/DB199576841", 
	                      "USER46908", 
	                      "25602560"); 
	       befehl = verbindung.createStatement(); 
	    } 
	    catch (Exception e)  { 
	       System.err.println("Verbindung zu konnte nicht hergestellt werden");
	       
	       
	    } 
	    
	    
	    
	    
	    
	}
	
	
	public static void auslesen() {
		
	    // Daten auslesen 
	    try { 
	       ResultSet datenmenge; 
	       datenmenge = befehl.executeQuery("SELECT * FROM PM ORDER BY Name;");
	    
	    
	       // Einzelne Datensätze ausgeben 

	    
	    
	    
	       while(datenmenge.next())  { 
	         name = datenmenge.getString("Name"); 
	         betreff = datenmenge.getString("Betreff"); 
	         von = datenmenge.getString("Von"); 
	         id = datenmenge.getInt("ID"); 
	         nummer = datenmenge.getInt("Nummer"); 
	         abgefragt = datenmenge.getString("Abgefragt"); 
	         
		       verbindung.close()
			    
			    catch (Exception e) { 
			       e.printStackTrace(); 	
		
		}
	         
	       }}
		

	
	

	    


}


Was ist daran schon wieder falsch? Das er mit drawString keine MySQL Variable ausgeben kann is mir klar, aber wie sonst?
 

PoiSoN

Bekanntes Mitglied
1.) Ich verstehe immer noch nicht, warum du die beiden Methoden in der paint aufrufst?? Warum machst du
das nicht in der main?

2.) Wenn du SQL-Abfragen mit Java ausführst, benötigt der SQL-String kein Semikolon.

3.) Wie wärs wenn du einen parametrisierten Konstruktor VocamusPM(String,String,String,int,int,String)
anlegen würdest und diesen in der auslesen() mit den Werten aus der DB füllst. Diese VocamusPM-Objekte
kannst du dann als Array oder innerhalb eines Vectors zurückgeben und in deinem JFrame wie gewünscht
innerhalb irgendwelcher Labels/Textareas/was auch immer ausgeben.
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben