# Änderung einer Bücher-Datenbank mit jdbc



## planlos (9. Dez 2008)

Hallo an alle,
ich versuche gerade bei einer Bücherdatenbank, einen bereits vorhandenen Untertitel,
mit einem weiteren zu ergänzen und verstehe nicht, wo mein fehler liegt, siehe unten



```
import java.sql.*;
class jdbc {
   static Connection con;// con= Verbindung zum Server
   static DatabaseMetaData dmd;
   static Statement stmt;//Statement für SQL-Abfrage

   public static void main (String[] args)throws Exception {
      
      Class.forName("com.mysql.jdbc.Driver").newInstance(); //MyConnector/J 3.1
      con = DriverManager.getConnection//lass ich jetzt natürlich aus
      dmd = con.getMetaData();
      System.out.println("Änderung Datensatz");
      aendern("irgendeinbuchtitel","ein neuer buchtitel");
      
   }
   
   public static void aendern(String untertitelalt, String untertitelneu)throws Exception{
      
      ResultSet rs;
      stmt = con.createStatement();
      rs = stmt.executeQuery("SELECT buecher.untertitel, buecher.titel FROM buecher WHERE buecher.untertitel= '"+untertitelalt+"'");
      
      System.out.println("Untertitel vorher:");
      rs.beforeFirst();
      while(rs.next()){
      System.out.print(rs.getString("titel"));
      System.out.println(rs.getString("untertitel")+" ");
      }
      int upd = stmt.executeUpdate("UPDATE buecher set untertitel = untertitel + '"+untertitelneu+"' WHERE untertitel ='"+untertitelalt+"'");
      System.out.println("Untertitel danach:")
      rs.beforeFirst();
      while (rs.next()) {
      System.out.print(rs.getString("titel")+" ");
      System.out.println(rs.getString("untertitel"));
      
      }
      rs.close();
                  
   }


}
```


Die folgende Fehlermeldung erscheint:

Änderung der Datensätze
Untertitel vorher:
1. irgendeinbuchtitel
Exception in thread "main" com.mysql.jdbc.MysqlDataTruncation: Data truncation: Truncated incorrect DOUBLE value: 'ein neuer buchtitel'
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3489)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2536)
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1564)
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1485)
at jdbc.aendern(jdbc.java:36)
at jdbc.main(jdbc.java:17)

Könnt ihr mir vieleicht weiterhelfen? ich komme nicht auf den fehler. vielen vielen dank im voraus!!!
grüße planlos


----------



## SlaterB (9. Dez 2008)

Strings kann man wohl nicht mit + zusammenbauen,

funktioniert alles ohne das Konstrukt
> set untertitel = untertitel + '"+untertitelneu+"'
?

wenn's daran liegt, dann mache dich zu String-Methoden in SQL schlau,
in Oracle geht das mit | oder ||, glaube ich


----------



## Guest (10. Dez 2008)

Versuch's mit CONCAT
	
	
	
	





```
int upd = stmt.executeUpdate(
   String.format(
      "UPDATE buecher set untertitel = CONCAT(untertitel, '%s') WHERE untertitel = '%s'"
     ,untertitelneu
     ,untertitelalt
   )
);
```
(ich gehe davon aus, deine Untertitel keine Anführungszeichen enthalten)

@SlaterB
Stimmt, || ist es.


----------



## planlos (10. Dez 2008)

Guten Morgen,
vielen Danke erstmal für eure Antworten.
Das mit dem Concat hat schonmal ganz gut geklappt, nachdem ich ein paar möglichkeiten
ausprobiert habe. Ich habe auch noch selbst einen Fehler gefunden.
Da update, soweit ich das richtig verstanden habe (bin grad erst beim einsteigen), kein resultset
liefert, waren die anweisungen nach dem update-aufruf nicht ganz richtig..
deswegen wollte ich nach dem update noch einmal eine select-abfrage machen, die mir
anzeigt, ob das update erfolgreich war. Fehlermedungen bekomme ich jetzt keine mehr, aber besonders befriedigend ist die ausgabe auch nicht 

Ausgabe:

Änderung der Datensätze
Untertitel vorher:
Untertitel danach:

Komisch finde ich, dass er mir davor noch den alten untertitel angezeig hat und jetzt nichtmehr, obwohl bei der ersten Abfrage gar nicht geändert  habe 


```
public static void aendern(String untertitelalt, String untertitelneu)throws Exception{
		
		ResultSet rs;
		stmt = con.createStatement();
		rs = stmt.executeQuery("SELECT buecher.untertitel, buecher.titel FROM buecher WHERE buecher.untertitel= '"+untertitelalt+"'");
		
		System.out.println("Untertitel vorher:");
		rs.beforeFirst();
		while(rs.next()){
		System.out.print(rs.getString("titel"));
		System.out.println(rs.getString("untertitel")+" ");
		}
		
		rs.close();
		ResultSet rs2;
		
		int upd= stmt.executeUpdate(
				String.format("UPDATE buecher set untertitel = CONCAT(untertitel, '%s') WHERE untertitel = '%s'",untertitelneu ,untertitelalt ));
		System.out.println("Untertitel danach:");
		rs2=stmt.executeQuery("SELECT buecher.untertitel, buecher.titel FROM buecher WHERE buecher.untertitel= '"+untertitelalt+"'");
		rs2.beforeFirst();
		while (rs2.next()) {
		System.out.print(rs2.getString("titel")+" ");
		System.out.println(rs2.getString("untertitel"));
		
		}
		rs2.close();
						
	}
```

Ich werd in der zwischenzeit noch ein bißchen googlen und versuchen mich schlau zu machen.
Wie gesagt, bin grad erst am Anfang und hoffe das mein fehler nicht allzu banal ist 
 :roll: 
Danke und liebe grüße


----------



## HoaX (10. Dez 2008)

ich tippe mal die ausgabe kommt weil kein datensatz mit dem zu ändernden titel existiert.

btw liefert execureUpdate iirc einen int zurück der angibt wieviele datensätze betroffen waren -> apidoc


----------



## planlos (11. Dez 2008)

oh, ich seh grad in der datenbank, dass der neue untertitel hinzugefügt wurde   
Also vielen Dank für eure Hilfe!!
Liebe grüße


----------

