# MySQL und Java: Falsche Daten werden ausgelesen



## stetabar (2. Mai 2005)

Hallo zusammen,

habe eine Klasse, in der auf eine MySQL Tabelle zugegriffen wird.
Die ausgelesenen Werte werden in einem Array abgelegt.
In dem Array befinden sich aber periodische Werte, die sich wiederholen
und nicht die Werte, die eigentlich da sein sollten...

hat jemand ne Idee?


```
import java.sql.*;
import java.net.*;
import java.awt.event.*;
import java.lang.*;
import java.awt.*;
import javax.swing.*;

public class WeatherReadServer{
  
  private String conn_Output;
  private String dbHost 			= "localhost"; 
  private String dbPort 			= "3306"; 
  private String dbName 			= "DB"; 
  private String user 				= "admin"; 
  private String passwd 			= "root"; 
  private Connection conn 			= null; 
  private Statement statement;
  static public double[] tempVar 	= new double[2976],
  						 preVar 	= new double[2976],
  						 windVar 	= new double[2976],
  						 airVar 	= new double[2976],
  						 lightVar 	= new double[2976];
  static int[] 			 directVar  = new int[2976];
  int counter						= 0;
      	
public WeatherReadServer() { 
    initVar();
    initDB();
    datenEinlesen();
    closeDB(); 
}

public void initVar(){
	System.out.println("0 setzen...");
	for(int i=0;i<2976;i++)
	{
		tempVar[i]=0;
		preVar[i]=0;
		windVar[i]=0;
		airVar[i]=0;
		lightVar[i]=0;
		directVar[i]=0;
	}
}


public void initDB(){

 //treiber laden

 String driver = "com.mysql.jdbc.Driver";

 try 
 	  { 
 	    Class.forName(driver).newInstance(); 
    	//System.out.println("Class Loaded.\n");
 	  } 
 catch (Exception e) 
      { 
         //System.out.println("Treiber nicht geladen!"); 
         //e.printStackTrace(); 
      }

 //verbindung herstellen

 try 
 {  
    conn = DriverManager.getConnection("jdbc:mysql://" + dbHost + ":" + dbPort + "/" + dbName  , user , passwd);
    //System.out.println("Connection done.");
 } 
 catch(SQLException sqle) 
 {     
 	conn_Output = "jdbc:mysql://" + dbHost + ":" + dbPort + "/" + dbName + ","+ user+ ","+ passwd;
    //System.out.println(conn_Output);
 	//System.err.println("Error message: " + sqle.getMessage()); 
 }
}

public void closeDB(){
 
 //verbindung trennen

 if (conn != null) 
 { 
    try 
    { 
        conn.close();
        //System.out.println("Connection closed."); 
    } 
    catch(SQLException sqle) 
    { 
        //System.out.print(sqle.getMessage()); 
    } 
 }

}

public void datenEinlesen(){
	//System.out.println("datenEinlesen");
	
	try{ 
      statement = conn.createStatement(); 
            
      ResultSet rs = statement.executeQuery("SELECT * FROM 4cast_data ORDER BY ID DESC LIMIT 2976");
      while (rs.next()){
      	tempVar[counter] = rs.getDouble("temp");
      	preVar[counter] = rs.getDouble("pre");
      	windVar[counter] = rs.getDouble("wind");
      	airVar[counter] = rs.getDouble("air");
      	lightVar[counter] = rs.getDouble("light");
      	directVar[counter] = rs.getInt("direct");
      	System.out.println(tempVar[counter]);
      	counter++; 
      }
    
    
    } 
    catch(Exception add){ 
      //System.out.println("Fehlermeldung:" + add.getMessage());
    }
	
}

double[] getAir(){
	return airVar;
}
double[] getTemp(){
	return tempVar;
}
double[] getPre(){
	return preVar;
}
double[] getWind(){
	return windVar;
}
double[] getLight(){
	return lightVar;
}
int[] getDirect(){
	return directVar;
}
}
```


----------



## AlArenal (2. Mai 2005)

Hast du dein SELECT mal per Copy&Paste direkt auf die DB losgelassen und das Ergebnis mit dem deines Programms verglichen?


----------



## molotov (2. Mai 2005)

Mal nur so ins Blaue geraten:
Wird datenEinlesen() evtl. mehrmals aufgerufen? Da counter nicht zurückgesetzt wird könnten sich die Werte so wiederholen.


----------



## stetabar (2. Mai 2005)

AlArenal : hab ich, aber er führt es nicht aus

molotov : das ist nich das problem, da diese Klasse durch eine andere Aufgerufen wird und nur einmal ausgeführt wird...

hab den Fehler behoben, kann aber ehrlich gesagt nicht sagen, was ich geändert hab...
hab dies und das gemacht und jetzt geht's...

naja, besten dank!


----------



## AlArenal (2. Mai 2005)

stetabar hat gesagt.:
			
		

> AlArenal : hab ich, aber er führt es nicht aus



Würde mir zu denken geben...
Fehlermeldung?

Ist es nicht gängige Praxis sein SQL erstmal von Hand zu stricken und direkt auf die DB loszulassen, ehe man es in Java implementiert und damit ne zusätzliche Fehlerquelle einbaut?


----------



## stetabar (2. Mai 2005)

das problem is, es gibt keine fehlermeldung...


----------



## AlArenal (2. Mai 2005)

??

Du gibst "SELECT * FROM 4cast_data ORDER BY ID DESC LIMIT 2976" im MySQL-Client, phpMyAdmin oder sonstwo ein und irgendwas sagt MySQL doch dann...

Entweder nen Fehlermeldung oder das ResultSet mit evtl. zusätzlichen Angaben, bzw. keine Results (wenn nichts gefunden wurde) und die Angabe, dass eben 0 Rows gefunden wurden.


----------



## stetabar (2. Mai 2005)

mein browser sagt mir dann, dass er keine verbindung herstellen konnte...

weiß auch nich was das soll...

naja, komisch schon, weil ich sonst alle strings über mysqladmin teste...
bei dem ging es nicht...


----------



## AlArenal (2. Mai 2005)

Vielleicht läuft das Skript zu lange.. versuch mal mit LIMIT klein anzufangen, dann sollte auch was passieren..


----------



## stetabar (2. Mai 2005)

hab ich gemacht!

tut er ohne probleme...
aber habs jetzt auch lauffähig...

bin zwar der meinung nichts anders gemacht zu haben...
aber is mir gerade wurscht  es klappt...

dank dir auf jeden fall!


----------

