# PrepareStatement "Insert into" fehlermeldung



## butalive (11. Nov 2007)

hallo leider brauch ich schon wieder hilfe!
hab eine methode geschrieben, die das übergebene object in die db schreiben soll.

```
public static boolean speichern(Artikel toSave, Connection con){
		try{			
			 PreparedStatement pstmt2 = con.prepareStatement(
					 "INSERT INTO ARTIKEL(ID,BEZEICHNUNG,PREIS)"+
				      "VALUES(?,?,?)");			
			pstmt2.setInt(1,toSave.getId());
			pstmt2.setString(2,toSave.getBezeichnung());
			pstmt2.setDouble(3,toSave.getPreis());			
			ResultSet rs = pstmt2.executeQuery(); 
			pstmt2.close();			
			rs.close();					
		}catch(Exception e){			
			System.out.print(e);
			return false;
		}		
		return true;
	}
```
FEHLERMELDUNG "java.sql.SQLException: Statement does not generate a result set";
danke im vorraus


----------



## mlux (11. Nov 2007)

hi .. versuch mal anstatt


```
ResultSet rs = pstmt2.executeQuery();
```


```
ResultSet rs = pstmt2.executeUpdate();
```

zu schreiben. ich denke, das wird der Fehler sein.


----------



## The_S (12. Nov 2007)

das is genauso schwachsinnig. Einfach nur


```
pstmt2.executeUpdate();
```

oder


```
pstmt2.execute();
```

Du fügst ja was ein und bekommst insofern kein Ergebnis zurück.


----------



## butalive (12. Nov 2007)

ich bekomme jetzt zwar keine fehlermeldung, aber der datensatz wird nicht in die tabelle gespeichert.
lg martin


----------



## The_S (12. Nov 2007)

sollte aber funktionieren. Wie schaut deine Methode jetzt aus?


----------



## butalive (12. Nov 2007)

hier die methode

```
public static boolean speichern(Artikel toSave, Connection con){
		try{			
			 PreparedStatement pstmt4 = con.prepareStatement(
					 "INSERT INTO ARTIKEL VALUES(?,?,?)");				     
			pstmt4.setInt(1,toSave.getId());
			pstmt4.setString(2,toSave.getBezeichnung());
			pstmt4.setDouble(3,toSave.getPreis());				
			pstmt4.execute();		
			pstmt4.close();			
		}catch(Exception e){			
			System.out.print(e);
			return false;
		}		
		return true;
	}
```

und hier die ganze klasse.

```
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import javax.swing.*;

import org.omg.CORBA.ExceptionList;

import java.util.Iterator;


public class ArtikelDAO extends JPanel {	
	public static void main (String args[]){		
		double cheaper = 100.00;
		int finde = 3;
		Artikel toSave = new Artikel (15,"Tasche", 15.15);		
		Connection con = null;
		ArrayList ArtListe = new ArrayList();		
		//Treiber laden
		try{			
			//Treiber laden
			Class.forName("org.hsqldb.jdbcDriver");			
			System.out.println("Treiber erfolgreich geladen");			
			//Db verbindung aufbauen
			con = DriverManager.getConnection( "jdbc:hsqldb:file:I:/MeineHSQLDb", "sa", "" );
			System.out.println("Verbindung Aufgebaut");
			
			//Query			
			PreparedStatement pstmt = con.prepareStatement("SELECT* from ARTIKEL");			
			ResultSet rs = pstmt.executeQuery();
			
			//Liste mit Db einträgen füllen
			while (rs.next()){
				Artikel art = new Artikel();
				art.setId(rs.getInt("ID"));
				art.setBezeichnung(rs.getString("BEZEICHNUNG"));
				art.setPreis(rs.getDouble("PREIS"));
				ArtListe.add(art);
			}			
			
			//System.out.println(findebilliger(cheaper,con));			
			//System.out.println(finde(finde,ArtListe));
			System.out.println(ArtListe);
			if(speichern(toSave,con)){
				System.out.println("Speicher erfolgreich");
			}
			else{
				System.out.println("\t!!!Problem beim speichern!!!");
			}
			pstmt.close();			
			rs.close();				
			
		}catch (ClassNotFoundException e){
			e.printStackTrace();
		}catch (SQLException e){
			e.printStackTrace();
		}finally{
			if(con != null){
				try{
					con.close();
				}catch(SQLException e1){
					e1.printStackTrace();
				}
			}
		}
	}
	
	//Warum nur mit static
	public static Object finde(int finde,ArrayList ArtListe){
	      Iterator i = ArtListe.iterator();
	      try{
	         while(i.hasNext()){
	            Artikel p = (Artikel)i.next();           
	               if(finde == p.getId()){
	                  return p;
	               }
	         }     
	       return null;   
	      }
	      catch(Exception e){
	         System.err.print(e);
	         return null;
	      }     
	}	
	//Warum nur mit static
	public static List findebilliger(Double cheaper, Connection con){
		try{
			PreparedStatement pstmt2 = con.prepareStatement("SELECT* from ARTIKEL WHERE PREIS <= ?");			
			pstmt2.setDouble(1, cheaper);
			ResultSet rs2 = pstmt2.executeQuery();
			List ArtListe2 = new ArrayList();
			while (rs2.next()){
				Artikel art2 = new Artikel();
				art2.setId(rs2.getInt("ID"));
				art2.setBezeichnung(rs2.getString("BEZEICHNUNG"));
				art2.setPreis(rs2.getDouble("PREIS"));
				ArtListe2.add(art2);
			}
			pstmt2.close();			
			rs2.close();			
			return ArtListe2;
		}catch(Exception e){			
			System.out.print(e);
		}		
		return null;		
	}
```


----------



## J.C. (12. Nov 2007)

Mich wunderts dass du keine SQL Exception bekommst: INSERT INTO "Tabellen_Name" ("Spalte1", "Spalte2", ...)
VALUES ("Wert1", "Wert2", ...)

so ist es richtig


----------



## butalive (12. Nov 2007)

hoppla natürlich meine methode so ausgesehn , hatte sie nur zum testen geändert.
war aber ja auch die flasche art.
dennoch bekomm ich die werte noch immer nicht in die db.

```
public static boolean speichern(Artikel toSave, Connection con){
		try{			
			 PreparedStatement pstmt4 = con.prepareStatement("INSERT INTO ARTIKEL(ID,BEZEICHNUNG,PREIS)"+
                  "VALUES(?,?,?)"); 					 				     
			pstmt4.setInt(1,toSave.getId());
			pstmt4.setString(2,toSave.getBezeichnung());
			pstmt4.setDouble(3,toSave.getPreis());				
			pstmt4.execute();		
			pstmt4.close();			
		}catch(Exception e){			
			System.out.print(e);
			return false;
		}		
		return true;
	}
```


----------



## butalive (12. Nov 2007)

eigenartiger weise wird wenn ich diesen code ausführe, der hinzugefügte artikel angezeigt.

```
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import javax.swing.*;

import org.omg.CORBA.ExceptionList;

import java.util.Iterator;


public class test extends JPanel {	
	public static void main (String args[]){
		Artikel toSave = new Artikel (15,"Tasche", 15.15);		
		Connection con = null;
		ArrayList ArtListe = new ArrayList();		
		//Treiber laden
		try{			
			//Treiber laden
			Class.forName("org.hsqldb.jdbcDriver");			
			System.out.println("Treiber erfolgreich geladen");			
			//Db verbindung aufbauen
			con = DriverManager.getConnection( "jdbc:hsqldb:file:I:/MeineHSQLDb", "sa", "" );
			System.out.println("Verbindung Aufgebaut");
			try{			
				 PreparedStatement pstmt4 = con.prepareStatement("INSERT INTO ARTIKEL(ID,BEZEICHNUNG,PREIS)"+
	                  "VALUES(?,?,?)");			
				pstmt4.setInt(1,toSave.getId());
				pstmt4.setString(2,toSave.getBezeichnung());
				pstmt4.setDouble(3,toSave.getPreis());				
				pstmt4.executeUpdate();		
				pstmt4.close();			
			}catch(Exception e){			
				System.out.print(e);			
			}			
			
			//Query			
			PreparedStatement pstmt = con.prepareStatement("SELECT* from ARTIKEL");			
			ResultSet rs = pstmt.executeQuery();			
			while (rs.next()){
				Artikel art = new Artikel();
				System.out.println(rs.getInt("ID"));
				System.out.println(rs.getString("BEZEICHNUNG"));
				System.out.println(rs.getDouble("PREIS"));				
			}			
			pstmt.close();			
			rs.close();				
			
		}catch (ClassNotFoundException e){
			e.printStackTrace();
		}catch (SQLException e){
			e.printStackTrace();
		}finally{
			if(con != null){
				try{
					con.close();
				}catch(SQLException e1){
					e1.printStackTrace();
				}
			}
		}
	}	
}
```

lese ich aber nacher mit folgendem code nur aus, wird der artikel nicht mehr angezeigt.

```
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import javax.swing.*;

import org.omg.CORBA.ExceptionList;

import java.util.Iterator;


public class test extends JPanel {	
	public static void main (String args[]){
		Artikel toSave = new Artikel (15,"Tasche", 15.15);		
		Connection con = null;
		ArrayList ArtListe = new ArrayList();		
		//Treiber laden
		try{			
			//Treiber laden
			Class.forName("org.hsqldb.jdbcDriver");			
			System.out.println("Treiber erfolgreich geladen");			
			//Db verbindung aufbauen
			con = DriverManager.getConnection( "jdbc:hsqldb:file:I:/MeineHSQLDb", "sa", "" );
			System.out.println("Verbindung Aufgebaut");
					
			PreparedStatement pstmt = con.prepareStatement("SELECT* from ARTIKEL");			
			ResultSet rs = pstmt.executeQuery();			
			while (rs.next()){
				Artikel art = new Artikel();
				System.out.println(rs.getInt("ID"));
				System.out.println(rs.getString("BEZEICHNUNG"));
				System.out.println(rs.getDouble("PREIS"));				
			}			
			pstmt.close();			
			rs.close();				
			
		}catch (ClassNotFoundException e){
			e.printStackTrace();
		}catch (SQLException e){
			e.printStackTrace();
		}finally{
			if(con != null){
				try{
					con.close();
				}catch(SQLException e1){
					e1.printStackTrace();
				}
			}
		}
	}	
}
```


----------



## HoaX (12. Nov 2007)

altbekannter problem.

http://hsqldb.org/web/hsqlFAQ.html#FAQ

"After the program is finished, almost all statements are in the *.log file, and the *.data file is almost empty. Why?"


----------



## HoaX (12. Nov 2007)

altbekannter problem.

http://hsqldb.org/web/hsqlFAQ.html#FAQ

"After the program is finished, almost all statements are in the *.log file, and the *.data file is almost empty. Why?"


----------



## butalive (12. Nov 2007)

und was heisst das jetzt hab mir zwar die faq angeschaut bin aber nicht drauf gekommen was ich jetzt zu tun hab.
lg martin


----------



## DocRandom (13. Nov 2007)

> After the program is finished, almost all statements are in the *.log file, and the *.data file is almost empty. Why?
> 
> The database was not shut down properly. When you restart the database, the *.log file will be processed and an automatic checkpoint will be performed. No commited data will be lost. To avoid this, use the SQL command "SHUTDOWN" when your application has finished with the database.
> 
> The statements that make up the database are saved in the *.script file (mostly CREATE statements and INSERT statements for memory tables). Only the data of cached tables (CREATE CACHED TABLE) is stored in the *.data file. Also all data manipulation operations are stored in the *.log file (mostly DELETE/INSERT) for crash recovery. When the SHUTDOWN or CHECKPOINT command is issued to a database, then the *.script file is re-created and becomes up-to-date. The .log file is deleted. The *.data file is also closed and backed up as the *.backup file. When the database is restarted, all statements of the *.script file are executed first and new statements are appended to the .log file as the database is used.


..hmm was ist daran nicht zu verstehen?





> The database was not shut down properly. When you restart the database, the *.log file will be processed and an automatic checkpoint will be performed. No commited data will be lost. To avoid this, use the SQL command "SHUTDOWN" when your application has finished with the database.



lg
DocRandom


----------



## butalive (13. Nov 2007)

super danke
habs gestern schon hin bekommen funktioniert jetzt mit shutdown.
schas fehler. hat mir echt nerven gekostet


----------

