# Syntax für Select - Abfrage mit Variablen



## ghost (20. Jan 2005)

Ich will ne Select-Abfrage mit Variablen Programmieren, leider mag Java meinen Versuch nicht. Wie muß ichs umändern?

```
try{
				if ( stmt.execute("select sel"+" from tab;")){
					res = stmt.getResultSet();
					show_result(res);
					res.close();
```


----------



## bronks (20. Jan 2005)

Das in Deinem Code kann alles mögliche bedeuten. Was willst Du konkret machen bzw. erreichen?

Sonst kann ich Dir noch diesen Suchbegriff empfehlen: "prepared statement"   evtl. ist das die Lösung.


----------



## AlArenal (20. Jan 2005)

Wo soll denn da die Variable sein? Das Semikolon brauchste auch nicht. Das wird nur benötigt, wenn man von Hand im DB-Client rummacht..


----------



## ghost (20. Jan 2005)

Die Variablen sind:
sel --> was wird gesucht
tab --> in welcher Tabelle wird gesucht

Die Variablen werden in Textfeldern eingegeben und dann per getText ausgelesen.  Ich weiß blos nicht, wie ich das mit dem String beim Statement machen muß?


----------



## Gast (24. Jan 2005)

Ist es eigentlich besser den String vorher zu erzeugen und ihn dann komplett dem Statement zu übergeben?

Was muß man bei der String-Schreibweise im Statement beachten?


----------



## Bleiglanz (24. Jan 2005)

Gast hat gesagt.:
			
		

> Ist es eigentlich besser den String vorher zu erzeugen und ihn dann komplett dem Statement zu übergeben?
> 
> Was muß man bei der String-Schreibweise im Statement beachten?


a) du sollst ein Prepared Statement verwenden, wenn es "variable" Parameter gibt
b) beachten? SELECT spalte1, spalte2 FROM table ist schon ok
c) du musst natürlich die richtige execute Methode nehmen, die dir ein ResultSet zurückgibt


----------



## Gast (27. Jan 2005)

Gehört zwar nicht ganz zum Thema, aber was muß ich machen wenn in dem SQL - Befehl "Sonderzeichen" wie z.B.: "" vorkommen?


----------



## AlArenal (27. Jan 2005)

Mit \ escapen. Siehe SQL-Referenz zum jeweiligen DB-System.


----------



## Bleiglanz (27. Jan 2005)

preparedStatement verwenden


----------



## Gast (27. Jan 2005)

Kann mir bitte wer sagen, wie ich das preparedStatement hier richtig verwende ( besonders den Teil mit den Sonderzeichen beim passwort)?

stmt = Verbindung.conn.prepareStatement("grant ? on ? to ?@? identified by "´?´"");

Thanks


----------



## Bleiglanz (27. Jan 2005)

oops,

für solche Statements kannst du kein PS verwenden (möglicherweise)

du müsstest 

ps.setString(1,"ALL");
ps.setString(2,"kunden.*");
ps.setString(3,"joe");
ps.setString(4,"hismachine");
ps.setString(5,"geheim")
...

usw. machen, aber weil Strings dabei automatisch gequotet werden, kommt sowas wie

grant 'ALL' ON 'kunden.*' to 'joe'@'hismachine' ..

heraus (also mit einfachen Hochkommas...)

ob die datenbank das schluckt?


----------



## Gast (27. Jan 2005)

Das heißt also, ich soll das ganze am besten mit einem einfachen sprich normalen statement machen. OK. Aber wie krieg ich dann da das mit den Hochkommas beim Passwort hin?


----------



## Bleiglanz (28. Jan 2005)

ausprobieren!

fürs Passwort kann man setString nehmen, schätze ich


----------



## Gast (29. Jan 2005)

Und wie muß ich das mit den Hochkommas beim Passwort machen bzw. wie gib ich die richtig an?


----------



## nollario (30. Jan 2005)

mysql nimmt man besser einfach hochkommata, also: ' statt "
schickt meistens....

prepared statements und setString sind natürlich die geeignetesten methoden...


----------



## Gast (31. Jan 2005)

Ich hab das ganze jetzt mal so probiert ( s.u. ) leider krieg ich beim Ausführen immer einen Nullpointer in Zeile 34?! Als ich das ganze mit festen Strings ( stmt.setString(2, "localhost"); ) versucht hab kam keine Meldung wieso krieg ich jetzt nen Fehler?


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

//Klasse für die Verarbeitung und Ausgabe von "Benutzer anlegen" 
public class Grant{
	
			public Grant(String user, String pwd, String db,String host, String li){
						
			//Statement stmt=null;			
			PreparedStatement stmt = null;
			ResultSet res = null;
			
			User.Texte("Verarbeitung beginnt");
					
			try{
				stmt = Verbindung.conn.prepareStatement("grant ? on ? to ?@? identified by ?");
				stmt.setString(1, li);
				stmt.setString(2,db);
				stmt.setString(3,user);
				stmt.setString(4,host);
				stmt.setString(5,pwd);
				
				
			}
			catch(SQLException e){
				User.Texte("Fehler beim Ausführen der Abfrage"+e);
			};
			
			try{
				if ( stmt.executeUpdate()){  <-- Zeile 34???
					res = stmt.getResultSet();
					show_result(res);
					res.close();
				}
				else{
					User.Texte("Abfrage ausgeführt");
					User.Texte("\r\nAnzahl Datensätze: "+ stmt.getUpdateCount());
				}
}
				catch (SQLException e){
			  		User.Texte("Fehler beim Ausführen der Abfrage: "+ e);
				}
				try{
					stmt.cancel();
					stmt.close();
				}
				catch (SQLException e){
					User.Texte("Fehler beim Ausführen der Abfrage" +e);
				}
				try{
					stmt.cancel();
					stmt.close();
					}
					catch(SQLException e){
						User.Texte("Fehler beim Ausführen der Abfrage2"+e);
				}
			}
```


----------



## Bleiglanz (1. Feb 2005)

```
}
catch(SQLException e){
User.Texte("Fehler beim Ausführen der Abfrage"+e);
};

try{
if ( stmt.executeUpdate()){ <-- Zeile 34???
```
die einzige Möglichkeit für eine NPE in 34 ist, dass oben die Ex geflogen ist (d.h. dass stmp = .... schon gescheitert ist)

anders geht das nicht

bist du sicher dass in User.Text nix drin steht...?


----------



## Gast (1. Feb 2005)

Ich habs grad nochmal versuch. Aber es wurde nichts im Textfenster angezeigt und im Dos-Fenster kam wieder nur der Nullpointer...


----------



## Bleiglanz (1. Feb 2005)

bist du dir bei der Zeile sicher


```
res = stmt.getResultSet();
show_result(res);
res.close();
```
is totaler unsinn, der Befehl gibt kein ResultSet zurück


----------



## Gast (1. Feb 2005)

Ich hab jetzt an dem Statement "herumprobiert" doch es liefert mir immer nur den Nullpointer. Im Ausgabefenster wird nichts angezeigt. Ich bin schön langsam am rotieren  :cry: ... Könnte mir jemand vielleicht zeigen wie dieses ver.... Teil richtig geht?   DANKE


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

//Klasse für die Verarbeitung und Ausgabe von "Benutzer anlegen" 
public class Grant{
	
			public Grant(String user, String pwd, String db,String host, String li){
						
			//Statement stmt=null;			
			PreparedStatement stmt = null;
			ResultSet res = null;
			
			User.Texte("Verarbeitung beginnt");
					
			try{
				stmt = Verbindung.conn.prepareStatement("grant all on shanor to test@localhost identified by 'test'");
			/*	stmt.setString(1,li);
				stmt.setString(2,db);
				stmt.setString(3,user);
				stmt.setString(4,host);
				stmt.setString(5,pwd);*/
				
				
			}
			catch(SQLException e){
				User.Texte("Fehler beim Ausführen der Abfrage"+e);
			};
			
			try{
				res = stmt.executeUpdate();
				stmt.setString(1,li);
				stmt.setString(2,db);
				stmt.setString(3,user);
				stmt.setString(4,host);
				stmt.setString(5,pwd);
				User.Texte("\r\nAnzahl Datensätze: "+stmt.getUpdateCount());
				}
				catch (SQLException e){
					User.Texte("Fehler beim Ausführen" + e);
				}
				/*if ( stmt.execute()){
					res = stmt.getResultSet();
					show_result(res);
					res.close();
				}
				else{
					User.Texte("Abfrage ausgeführt");
					User.Texte("\r\nAnzahl Datensätze: "+ stmt.getUpdateCount());
				}
}
				catch (SQLException e){
			  		User.Texte("Fehler beim Ausführen der Abfrage: "+ e);
				}*/
				try{
					stmt.cancel();
					stmt.close();
				}
				catch (SQLException e){
					User.Texte("Fehler beim Ausführen der Abfrage" +e);
				}
				try{
					stmt.cancel();
					stmt.close();
					}
					catch(SQLException e){
						User.Texte("Fehler beim Ausführen der Abfrage2"+e);
				}
			}
```


----------



## bronks (1. Feb 2005)

Gast hat gesagt.:
			
		

> grant all on shanor to test@localhost identified by 'test'


Was willst Du eigentlich damit erreichen? Das "grant" modified doch nur eine oder mehrere Tabellen. Entweder das "grant" wird erledigt oder es gibt eine Exception, wenn es nicht erledigt werden konnte. Ein "ResultSet" wirst Du da nicht bekommen.


----------



## Gast (1. Feb 2005)

Ich will das man per GUI ( JTextfield und getText ) die Daten eingeben kann ( Benutzer, pw, host, usw ) und das preparedstatement soll dann diese ganzen Daten nehmen und mir den Benutzer anlegen...


----------



## bronks (1. Feb 2005)

Gast hat gesagt.:
			
		

> Ich will das man per GUI ( JTextfield und getText ) die Daten eingeben kann ( Benutzer, pw, host, usw ) und das preparedstatement soll dann diese ganzen Daten nehmen und mir den Benutzer anlegen...


Das "stmt.execute()" führt Deinen SQL aus und der Benutzer ist angelegt. Das wars.

Bleiglanz hat ja schon oben erwähnt: "... is totaler unsinn, der Befehl gibt kein ResultSet zurück"


----------



## Gast (1. Feb 2005)

Ich habs ja auch schon mit execute wie mit executeupdate probiert doch ich krieg immer diesen blöden nullpointer und ich weiß nicht warum...


----------



## bronks (1. Feb 2005)

Gast hat gesagt.:
			
		

> Ich habs ja auch schon mit execute wie mit executeupdate probiert doch ich krieg immer diesen blöden nullpointer und ich weiß nicht warum...



Nimm diesen Code als Grundlage. Das steht alles drin damit es funktioniert. Den Luxus kannste dann schrittweise einbauen und wenn dann etwas nicht klappt, dann war es das letzte was Du daran verändert hast.

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

//Klasse für die Verarbeitung und Ausgabe von "Benutzer anlegen" 
public class Grant{ 
    
         public Grant(String user, String pwd, String db,String host, String li){ 


         try{ 
            stmt = Verbindung.conn.prepareStatement("grant all on shanor to test@localhost identified by 'test'"); 
	    stmt.execute();
	    stmt.close();
	    } 
            catch (SQLException e){("Das ist schief gelaufen: "+ e);}
	 }
}
```


----------



## Gast (1. Feb 2005)

Ich hab das ganze jetzt wie unten gemacht. Jetzt kommt die Fehlermeldung: This command is not supportet in the prepared statement protocol yet ( im Ausgabefenster als SQLException ).

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;
import java.sql.*;
import java.io.*;

//Klasse für die Verarbeitung und Ausgabe von "Benutzer anlegen" 
public class Grant{

			public Grant(){
			PreparedStatement stmt = null;			
		try{
			stmt = Verbindung.conn.prepareStatement("grant all on shanor to test@localhost identified by 'test'");
			stmt.execute();
			stmt.close();
		}
		catch(SQLException e){
			User1.Texte("Das ist schiefgelaufen " +e);
		}
		}
		}


----------



## bronks (1. Feb 2005)

Gast hat gesagt.:
			
		

> This command is not supportet in the *prepared statement *protocol yet ( im Ausgabefenster als SQLException ).


Ich bin mir sicher, daß Du weißt, was als alternative in Frage kommt ...


----------



## Gast (1. Feb 2005)

C:\Progs\Grant.java:14: cannot resolve symbol
symbol  : method createStatement (java.lang.String)
location: interface java.sql.Connection
                        stmt = Verbindung.conn.createStatement("grant all on shanor to test@localhost identified by 'test'");
                                              ^
C:\Progs\Grant.java:15: cannot resolve symbol
symbol  : method execute ()
location: interface java.sql.Statement
                        stmt.execute();
                            ^
2 errors
bei:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;
import java.sql.*;
import java.io.*;

//Klasse für die Verarbeitung und Ausgabe von "Benutzer anlegen" 
public class Grant{

			public Grant(){
			Statement stmt = null;			
		try{
			stmt = Verbindung.conn.createStatement("grant all on shanor to test@localhost identified by 'test'");
			stmt.execute();
			stmt.close();
		}
		catch(SQLException e){
			User1.Texte("Das ist schiefgelaufen " +e);
		}
		}
		}

und bei unten stehendem kommt die selbe Meldung wie bei dem zuerst geposteten:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;
import java.sql.*;
import java.io.*;

//Klasse für die Verarbeitung und Ausgabe von "Benutzer anlegen" 
public class Grant{

			public Grant(){
			PreparedStatement stmt = null;			
		try{
			stmt = Verbindung.conn.prepareStatement("grant all on shanor to test@localhost identified by 'test'");
			stmt.executeUpdate();
			stmt.close();
		}
		catch(SQLException e){
			User1.Texte("Das ist schiefgelaufen " +e);
		}
		}
		}


----------



## bambi (1. Feb 2005)

Ich schreibe immer:


```
conn = xxx.getConnection();
stmt = conn.createStatement();
stmt.execute("grant all on shanor to test@localhost identified by 'test'");
```

Weiss, aber nicht, ob's denn daran liegt. Veilleicht klappt's ja auch anders...

ciao


----------



## Gast (2. Feb 2005)

Das hab ich ja probiert ( siehe obiges post / 2. Versuch ). Da krieg ich aber ne Fehlermeldung beim kompilieren...


----------



## abollm (2. Feb 2005)

Ich habe mir den Code von deinem zweiten Posting (gestern um ca. 12:30 Uhr) einmal kurz angesehen. Dabei sind mir mindestens zwei Fehler aufgefallen. Ich habe dir einmal den von mir in _einigen_ Teilen veränderten Code gepostet, der beim Kompilieren nun wenigstens keinen Fehler mehr liefert.
Vielleicht hilft dir das ja weiter:

```
import java.sql.*;
import java.util.Enumeration;


//Klasse für die Verarbeitung und Ausgabe von "Benutzer anlegen"
public class Grant{
   
         public Grant(String user, String pwd, String db,String host, String li){
         
         Connection conn = null;         
         
         //Statement stmt=null;         
         PreparedStatement stmt = null;
         ResultSet res = null;

         System.out.println("Aktuell geladene MySQL-Treiber ...");
		 for (Enumeration enum = DriverManager.getDrivers(); enum
				.hasMoreElements();) {
			System.out.println(enum.nextElement().getClass().getName());
		 }
         
         System.out.println("Verarbeitung beginnt");
         String sql = "grant all on shanor to test@localhost identified by 'test'";
         try{
            stmt = conn.prepareStatement(sql);
         /*   stmt.setString(1,li);
            stmt.setString(2,db);
            stmt.setString(3,user);
            stmt.setString(4,host);
            stmt.setString(5,pwd);*/
            
            
         }
         catch(SQLException e){
            System.out.println("Fehler beim Ausführen der Abfrage"+e);
         };
         
         try{
            stmt.executeUpdate(sql);
            stmt.setString(1,li);
            stmt.setString(2,db);
            stmt.setString(3,user);
            stmt.setString(4,host);
            stmt.setString(5,pwd);
            System.out.println("\r\nAnzahl Datensätze: "+stmt.getUpdateCount());
            }
            catch (SQLException e){
               System.out.println("Fehler beim Ausführen" + e);
            }
            /*if ( stmt.execute()){
               res = stmt.getResultSet();
               show_result(res);
               res.close();
            }
            else{
               System.out.println("Abfrage ausgeführt");
               System.out.println("\r\nAnzahl Datensätze: "+ stmt.getUpdateCount());
            }
}
            catch (SQLException e){
                 System.out.println("Fehler beim Ausführen der Abfrage: "+ e);
            }*/
            try{
               stmt.cancel();
               stmt.close();
            }
            catch (SQLException e){
               System.out.println("Fehler beim Ausführen der Abfrage" +e);
            }
            try{
               stmt.cancel();
               stmt.close();
               }
               catch(SQLException e){
                  System.out.println("Fehler beim Ausführen der Abfrage2"+e);
            }
         }
 }
```


----------



## Gast (2. Feb 2005)

Ich hab das jetzt eingegeben, aber leider kommt immer noch der Nullpointer in der Zeile --> stmt = conn.prepareStatement(SQL);
Ich poste jetzt hier mal den Aufruf mit, vielleicht hab ich ja auch da einen Fehler drinn. Ich weiß nicht mehr weiter, warum ich immer diese nullpointer krieg????

Eingabemaske = User1.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;
import java.sql.*;

//Klasse für den Menupunkt "Benutzer anlegen"
public class User1 extends JFrame implements ActionListener {
   JButton bu10,bu20;
   private static JTextArea ausg = new JTextArea(3,30);
   private JTextField tf1 = new JTextField();
   private JTextField tf2 = new JTextField();
   private JTextField tf3 = new JTextField();
   private JTextField tf4 = new JTextField();
   private JTextField tf5 = new JTextField();


   public static void Texte(String text){
		User1.ausg.append("\n"+text);
		}

   public User1(){
      super("Benutzer anlegen");

      JPanel pa = new JPanel();
      pa.setLayout(new GridBagLayout());

      JLabel la = new JLabel();
      la.setOpaque(true);
      la.setFont(new Font("Helvetica", Font.BOLD, 20));
      la.setText("Benutzer anlegen");
      pa.add(la, new GridBagConstraints(0,0,1,1,1.0,0.1,
         GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0,0,0,0),1,1));

	  JLabel la1 = new JLabel();
	  la1.setOpaque(true);
	  la1.setFont(new Font("Helvetica", Font.BOLD, 14));
	  la1.setText("Benutzername: ");
	  pa.add(la1, new GridBagConstraints(0,1,1,1,1.0,0.1,
			GridBagConstraints.CENTER,GridBagConstraints.NONE, new Insets(0,0,0,0),1,1));

	  JLabel la2 = new JLabel();
	  la2.setOpaque(true);
	  la2.setFont(new Font("Helvetica", Font.BOLD, 14));
	  la2.setText("Paßwort: ");
 	  pa.add(la2, new GridBagConstraints(0,2,1,1,1.0,0.1,
			GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0,0,0,0),1,1));

	  JLabel la3 = new JLabel();
	  la3.setOpaque(true);
	  la3.setFont(new Font("Helvetica", Font.BOLD, 14));
	  la3.setText("Datenbank: ");
	  pa.add(la3, new GridBagConstraints(0,3,1,1,1.0,0.1,
			GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0,0,0,0),1,1));

	  JLabel la4 = new JLabel();
	  la4.setOpaque(true);
	  la4.setFont(new Font("Helvetica", Font.BOLD, 14));
	  la4.setText("Host: ");
	  pa.add(la4, new GridBagConstraints(0,4,1,1,1.0,0.1,
			GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0,0,0,0),1,1));


	  tf1.setFont(new Font("Helvetica", Font.PLAIN, 14));
	  pa.add(tf1, new GridBagConstraints(1,1,1,1,1.0,0.1,
	  	GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0,0,0,0),1,1));

	  tf2.setFont(new Font("Helvetica", Font.PLAIN, 14));
	  pa.add(tf2, new GridBagConstraints(1,2,1,1,1.0,0.1,
	  	GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0,0,0,0),1,1));

	  tf3.setFont(new Font("Helvetica", Font.PLAIN, 14));
	  pa.add(tf3, new GridBagConstraints(1,3,1,1,1.0,0.1,
	  	GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0,0,0,0),1,1));

	  tf4.setFont(new Font("Helvetica", Font.PLAIN, 14));
	  pa.add(tf4, new GridBagConstraints(1,4,1,1,1.0,0.1,
	  	GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0,0,0,0),1,1));

	  JLabel l2 = new JLabel();
	  l2.setOpaque(true);
	  l2.setFont(new Font("Helvetica", Font.BOLD, 14));
	  l2.setText("Option: ");
	  pa.add(l2, new GridBagConstraints(0,5,1,1,1.0,0.1,
	  	GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0,0,0,0),1,1));

	  tf5.setFont(new Font("Helvetica", Font.PLAIN,14));
	  pa.add(tf5, new GridBagConstraints(1,5,1,1,1.0,0.1,
	  	GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(0,0,0,0),1,1));

	  JLabel l = new JLabel();
      l.setOpaque(true);
      l.setFont(new Font("Helvetica", Font.BOLD, 14)); 
      l.setText("Bitte wählen Sie die entsprechende Option!");
      pa.add(l, new GridBagConstraints(1,5,1,1,1.0,1.0,
      	GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0,0,0,0),1,1));

	  ausg.setFont(new Font("Helvetica", Font.PLAIN, 14));
      ausg.setEditable(false);
      JScrollPane scro = new JScrollPane(ausg);
      pa.add(scro, new GridBagConstraints(0,6,3,3,1.0,1.0,
         GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0,0,0,0),1,1));

      bu10= new JButton();
      bu10.setText("Benutzer speichern");
      bu10.setBackground(Color.green);
      bu10.addActionListener(this);
      pa.add(bu10,new GridBagConstraints(0,9,1,1,1.0,0.1,
         GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0,0,0,0),1,1));

      bu20= new JButton();
      bu20.setText("Schließen");
      bu20.setBackground(Color.red);
      bu20.addActionListener(this);
      pa.add(bu20,new GridBagConstraints(1,9,1,1,1.0,0.1,
         GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0,0,0,0),1,1));

      this.getContentPane().setLayout(new GridBagLayout());
         this.getContentPane().add(pa, new GridBagConstraints(0,0,1,1,1.0,1.0,
            GridBagConstraints.NORTH, GridBagConstraints.BOTH, new Insets(0,0,0,0),1,1));
            this.pack();
            this.setVisible(true);

      }
   //ActionListener für die Buttons
   public void actionPerformed(ActionEvent e){
     Object ob = e.getSource();
     if(ob == bu10){
     	User1.Texte("Button gedrückt");
     	Grant G = new Grant();

     }
     if(ob == bu20){
        this.dispose();
     }
   }

}

Verarbeitung = Grant.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;
import java.sql.*;
import java.io.*;
import java.util.Enumeration;

//Klasse für die Verarbeitung und Ausgabe von "Benutzer anlegen" 
public class Grant{

			public Grant(){

		Connection conn = null;

		PreparedStatement stmt = null;
		ResultSet res = null;

		User1.Texte("Aktuell geladene MySQL - Treiber ...");
		for ( Enumeration enum = DriverManager.getDrivers(); enum.hasMoreElements(){
			User1.Texte(enum.nextElement().getClass().getName());
					}
			User1.Texte("Verarbeitung beginnt");
			String sql = "grant all on shanor.* to test@localhost identified by 'test'";
			try{
				stmt = conn.prepareStatement(sql);
				}
				catch(SQLException e){
					User1.Texte("Fehler beim Ausführen der Abfrage: "+e);
				};

				try{
					stmt.executeUpdate(sql);
					User1.Texte("\r\nAnzahl Datensätze: "+stmt.getUpdateCount());
				}
				catch(SQLException e){
					User1.Texte("Fehler beim Ausführen " + e);
				}
				try{
					stmt.cancel();
					stmt.close();
				}
				catch(SQLException e){
					User1.Texte("Fehler beim Ausführen " +e);
				}
				try{
					stmt.cancel();
					stmt.close();
				}
				catch(SQLException e){
					User1.Texte("Fehler beim Ausführen " +e);
				}
				}
				}


----------



## bambi (2. Feb 2005)

Deine connection ist null:


```
Connection conn = null;
...
stmt = conn.prepareStatement(sql);
```

Die musst Du schon irgendwo initialisieren - oder habe ich da jetzt was uebersehen?


----------



## Gast (2. Feb 2005)

Ich bau die Connection in der Klasse Verbindung ( s.u. ) auf. Connection conn = null hab ich eigentlich nur gemacht, weil es in abollms Verbesserung meines Versuchs so drinsteht...

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

//Klasse mit der die Verbindung zur MySQL - Datenbank aufgebaut wird
public class Verbindung {
		public static Connection conn = null;
		public Verbindung(String user, String password, String dbhost, String dbname ){

   			Komplett.Text("Button gedrückt");
				try{
				Komplett.Text("Treiber wird geladen");
				//Laden des Treibers
					Class.forName("com.mysql.jdbc.Driver");
					Komplett.Text("com.mysql.jdbc.Driver");
				    Komplett.Text("Treiber wird geladen");
				}
				catch(ClassNotFoundException cnfs){
				Komplett.Text("Class not Found");
				}
		try{
			  //conn-String erstellen
			  String connstr = "jdbc:mysql://" + dbhost + "/" + dbname;
			  Komplett.Text(connstr);
			 //Verbindungsaufbau
			 conn = DriverManager.getConnection(connstr, user, password);
				Komplett.Text("Verbindungsaufbau");
				Komplett.test = true;}
				//Abfangen der Fehlermeldung
				catch(SQLException sqle){
					Komplett.Text("Verbindung fehlgeschlagen: " + sqle.getMessage());
}
}
}


----------



## bambi (2. Feb 2005)

Hast Du das mal genauer angesehen und abgefangen?


```
if (conn != null)  {
    stmt = conn.prepareStatement(sql);
}  else  {
    System.out.println("Connection is null");
    return; // oder was anderes
}
```

Versuchen koennt' man's ja mal. Ich haett' sonst im Moment auch keine Idee...


----------



## Bleiglanz (3. Feb 2005)

> Ich bau die Connection in der Klasse Verbindung ( s.u. ) auf. Connection conn = null hab ich eigentlich nur gemacht, weil es in abollms Verbesserung meines Versuchs so drinsteht...
> ...


du postest immer den ganzen zeugs und sagst nicht, was und wo der aktuelle fehler ist???

warum ist conn static? lass das static weg!


----------



## Gast (3. Feb 2005)

Ich poste das ganze Zeug immer weil danach gefragt wird...
Der Fehler ist immer noch der wie am Anfang, das das Statement nicht funzt ( normales statement bringt Fehler s.o. / preparedStatement kann nicht ausgeführt werden s.o.)...


----------



## Gast (3. Feb 2005)

Vielleicht hilft das weiter den Grund für mein Problem zu finden.
Wenn ich:
a) 	stmt = conn.prepareStatement(sql); in obigem Code mache,
dann kommt für stmt = conn.prepareStatement(sql); ein NullPointer und es kommt die Ausgabe die Enumerator Ausgabe bevor das Prog den Fehler bringt

b) stmt = Verbindung.conn.prepareStatement(sql); ( conn immer noch static in Klasse Verbindung ) dann krieg ich nen Nullpointer in 
	stmt.executeUpdate(sql); und es kommt die SQLException This Command is not Supportet by prepared Statement yet...


----------



## bronks (3. Feb 2005)

@Gast:
Ich komm da nicht mehr mit. Das ist Verwirrung pur.

Wenn Du hier registriert wärst und in Deinem Profil Deinen Wohnort eingetragen hättest, dann könnte sich evtl.  jemand aus Deiner Nähe per PN melden, der sich von Dir auf Kaffe&Kuchen einladen läßt und sich die Sache live ansieht.


----------



## abollm (3. Feb 2005)

bronks hat gesagt.:
			
		

> @Gast:
> Ich komm da nicht mehr mit. Das ist Verwirrung pur.
> 
> Wenn Du hier registriert wärst und in Deinem Profil Deinen Wohnort eingetragen hättest, dann könnte sich evtl.  jemand aus Deiner Nähe per PN melden, der sich von Dir auf Kaffe&Kuchen einladen läßt und sich die Sache live ansieht.



Guter Vorschlag!


----------

