# Fehler bei Ausgabe in Datei



## backisl (6. Feb 2004)

Wo ist der Fehler?

```
import java.util.*;
import java.sql.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

// ---------------------------------------------------------------------------------------

class Dateizugriff {

   static
   {
      try
      {
         
         Class.forName("COM.ibm.db2.jdbc.app.DB2Driver").newInstance();
         
      }
      catch (Exception e)
      {
         e.printStackTrace();
         System.err.println(e.getMessage());
         System.exit(0);
      }
   }

   // ---------------------------------------------------------------------------------------

   // Capture window events...
   static private class FrameCloser extends WindowAdapter
   {
    public void windowClosing(WindowEvent we)
     {
      System.out.println("windowClosing..." + we);
      we.getWindow().dispose();
      System.exit(0);
     }
   }

   // ---------------------------------------------------------------------------------------
   // Capture key events...
   static private class KeyInterceptor implements KeyListener
   {
    public void keyTyped(java.awt.event.KeyEvent ke) {}
    public void keyPressed(java.awt.event.KeyEvent ke) {}
    public void keyReleased(java.awt.event.KeyEvent ke)
     {
      // System.out.println("keyReleased..." + ke);
      if(ke.getKeyCode() == KeyEvent.VK_ENTER)
       {
        TextField tf = (TextField) ke.getComponent();
        synchronized(tf)
         {tf.notify();
         }
       }
     }
   }

   // ---------------------------------------------------------------------------------------

    public static void main(String argv[])
   {

         int AnzahlSpalten;
         Connection con=null;
         BufferedReader din= new BufferedReader(new InputStreamReader(System.in));

         String userid  = argv[0];
         String passwd  = getPassword(userid);
         String url = argv[1];        //"jdbc:db2:DB2R";
         String Creator = argv[2];    //"DB2A.G000";
         String INR = argv[3];
      try
            {
               con = DriverManager.getConnection(url,userid,passwd);

               System.out.println("Anmeldung erfolgreich");
               NTServerErmitteln(Creator,INR, con);




            }
      catch (SQLException e)
      {
          System.out.println("Fehler!");
      }



         // *************** ende ************************************

         System.exit(0);


   }

// ---------------------------------------------------------------------------------------

public static String getPassword(String userid)
   {
    Frame f; Panel p; Label l; TextField tf;

    // Create the frame
    f = new Frame("Kennworteingabe");
    f.setLocation(400,400);
    f.setSize(350,100);
    // Reister ourselves for 'Close' events
    f.addWindowListener(new FrameCloser());

    // Create the panel
    p = new Panel();
    f.add(p,"Center");
    l = new Label("Bitte Kennwort eingeben: " + userid);
    tf = new TextField(20);
    tf.setEchoChar('*');
    p.add(l,"Center");
    p.add(tf,"Center");
    try
     { f.show();
     }
    catch(Exception ex)
     {
      ex.printStackTrace();
      System.out.println("Your ===> DISPLAY <=== Environment Variable is not exported properly.  Please correct and retry.");
     }

    try {Thread.sleep(1000); } catch(InterruptedException ie) {}
    f.show();
    tf.requestFocus();
    tf.addKeyListener(new KeyInterceptor());

    //   System.out.println("Waiting for password to be entered...");


    synchronized(tf)
     {try { tf.wait(); } catch(InterruptedException e) {}
     }
    String password = tf.getText();
    f.transferFocus();
    f.dispose();
    return password;
   }

   // ---------------------------------------------------------------------------------------

public static void NTServerErmitteln(String Creator,String INR,Connection con)
   {
       String Agentversion;
       

       try
       {
         

         String query = "select * from "+Creator+" where KVED_STATUS='AKTIV' and INST_NR= "+INR;
         
         
         PreparedStatement stmt = con.prepareStatement(query);
         ResultSet rs = stmt.executeQuery();
         
            
			FileOutputStream file = new
			    FileOutputStream("test.txt");
			    while (rs.next())
			    {
			    file.write(rs.getString(1)+" "+rs.getString(2));
			    }
			file.close();
			}
		catch (IOException e) {
			e.printStackTrace();
			}
		}
	}
```


Bekomme diese Fehlermeldung:

Dateizugriff.java [170:1] cannot resolve symbol
symbol  : method write (java.lang.String)
location: class java.io.FileOutputStream
                            file.write(rs.getString(1)+" "+rs.getString(2));
                                ^
1 error
Errors compiling Dateizugriff.


----------



## Pulvertoastman (6. Feb 2004)

Das hat mit JDBC nichts zu tun. Schau dir mal die möglichen Argumente von write an.  Versuch mal das ganze über einen PrintStream

```
FileOutputStream file = new FileOutputStream("test.txt");
PrintStream ps = new PrintStream(file);
while (rs.next())
{
    ps.println(rs.getString(1)+" "+rs.getString(2));
}
ps.close();
file.close();
```


----------



## backisl (6. Feb 2004)

Der Code sieht jetzt so aus: 


```
public static void NTServerErmitteln(String Creator,String INR,Connection con)
   {
       String Agentversion;
       
       

       try
       {
         //Statement stmt = con.createStatement();

         String query = "select * from "+Creator+" where KVED_STATUS='AKTIV' and INST_NR= "+INR;
         
         //String query = "select * from G000.wat_agent";
         PreparedStatement stmt = con.prepareStatement(query);
         ResultSet rs = stmt.executeQuery();
         
         FileOutputStream file = new FileOutputStream("test.txt"); 
         PrintStream ps = new PrintStream(file); 
           while (rs.next()) 
           { 
            ps.println(rs.getString(1)+" "+rs.getString(2)); 
           } 
            ps.close(); 
            file.close();
         
         
       }
       catch(SQLException e)
       {
          e.printStackTrace();
       }
       

}
}
```


Jetzt bekomme ich diese Fehlermeldungen:

Dateizugriff.java [164:1] unreported exception java.io.FileNotFoundException; must be caught or declared to be thrown
         FileOutputStream file = new FileOutputStream("test.txt"); 
                                 ^
Dateizugriff.java [171:1] unreported exception java.io.IOException; must be caught or declared to be thrown
            file.close();
                ^
2 errors
Errors compiling Dateizugriff.


----------



## bummerland (6. Feb 2004)

backisl hat gesagt.:
			
		

> Jetzt bekomme ich diese Fehlermeldungen:
> 
> Dateizugriff.java [164:1] unreported exception java.io.FileNotFoundException; must be caught or declared to be thrown
> FileOutputStream file = new FileOutputStream("test.txt");
> ...



da stehts doch schon: du musst beim zugriff auf die datei die beiden exceptions java.io.FileNotFoundException und  java.io.IOException abfangen.


----------



## backisl (6. Feb 2004)

Haltet mich jetzt bitte nicht für bekloppt aber ich bin ziemlicher Anfänger und weiß nicht wie ich das genau machen muss.
Könntet ihr mir das kurz mal zeigen?


----------



## bygones (6. Feb 2004)

wenn dir das gar nichts sagt - woher hast denn dann den Code  :wink: 

Manches kann in Java zu einer Exception führe, d.h. zu einem Fehler, den der Programmiere abfangen muss (z.b. eine Datei kann nicht geöffnet werden).

Du fängst in deinem Code ja schon eine SQLException ab was anderes musst du nun nicht machen....

also füge einfach unter dem catch Block der SQLException folgendes hinzu


```
catch(IOException e) {
   e.printStackTrace();
}
```

Mit der IOException sollte die FileNotFoundException dann schon abgedeckt sein


----------



## backisl (6. Feb 2004)

Diese catch-Anweisung ist in meinem Code doch schon enthalten.

Wenn ich ganz lieb Frage, könnte mir dann einer von euch diesen Teil des Codes so umschreiben, dass er korrekt ist?


```
public static void NTServerErmitteln(String Creator,String INR,Connection con) 
   { 
       String Agentversion; 
        
        

       try 
       { 
         //Statement stmt = con.createStatement(); 

         String query = "select * from "+Creator+" where KVED_STATUS='AKTIV' and INST_NR= "+INR; 
          
         //String query = "select * from G000.wat_agent"; 
         PreparedStatement stmt = con.prepareStatement(query); 
         ResultSet rs = stmt.executeQuery(); 
          
         FileOutputStream file = new FileOutputStream("test.txt"); 
         PrintStream ps = new PrintStream(file); 
           while (rs.next()) 
           { 
            ps.println(rs.getString(1)+" "+rs.getString(2)); 
           } 
            ps.close(); 
            file.close(); 
          
          
       } 
       catch(SQLException e) 
       { 
          e.printStackTrace(); 
       } 
        

} 
}
```

Danke im Voraus!


----------



## bygones (6. Feb 2004)

auch wenn du mich ganz lieb bittest werde ich es nicht tun, da der Code schon oben steht (letzter Post von mir) !!

Zur Erklarung - du hast zwar einen catch Block schon drinnen, der fängt aber nur SQL Exceptions ab (deshalb heißt es SQLException). Da du aber auch mit Dateien hantierst können sog. IOExceptions auftreten.

Und nun die schwierige Frage - wenn das ein SQLException heißt und der catch Block steht schon richtig da, wie schaut es dann wohl bei IOException aus......  :roll: 

Probiers aus - dann können wir nochmal reden  :lol:


----------



## backisl (6. Feb 2004)

Danke dir!

Ich hätte vielleicht mal etwas genauer hinsehen sollen, dann hätte ich den Unterschied (IO - SQL) vielleicht auch gesehen!


----------



## bygones (6. Feb 2004)

freut mich dass dir das noch aufgefallen ist ... :lol:


----------



## Noares (8. Feb 2004)

Hallo hab eine Frage

bin noch absoluter Anfänger und hab jetzt ein bisschen was geschrieben.......hab dann mein Prog compiliert, bis jetzt noch keine Fehler.....aber wenn es dann ums executen geht kommt nur " Exception in thread "main" java.lang.NoSuchMethodError: main    wie jetzt? was is denn mit der main- Methode?  hab dann einfachmal nur zum Testen ein poppliges "Helloworld" prog ausprobiert .... kommt das gleiche.....also Fehler im Code sind nicht, muss an was anderem liegen, aber was?


----------



## bygones (8. Feb 2004)

```
public class TestWorld {
    public static void main(String[] args) {
           System.out.println("Hello World !");
   }
}
```

Schauts in etwa so aus ?

1.  Hast du auf alle Fälle die main - Methode drinnen ?
2. Ist der Klassenname auch gleich der Dateiname (also hier TestWorld.java) ?

Poste einfach mal notfalls deinen Code


----------

