# Neues Tupel in MySQL Datenbank mittels Kommandozeilenparameter anlegen



## Walter91 (4. Jun 2015)

Hallo liebe Forumgemeinde,

wie solls anders sein, ich hab ein Problem mit einer Aufgabe aus nem Übungsblatt für Informatik 2.
Es geht darum, dass auf dem Server der Uni eine mySQL Datenbank eingerichtet wurde und diese eine Tabelle
Hund enthält, mit Spalten: ID, name, lebensalter, besitzer
Sie wurde anhand dieser SQL-Abfrage erzeugt:
CREATE TABLE Hund
(
ID INT UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
lebensalter SMALLINT UNSIGNED NOT NULL,
besitzer VARCHAR(20),
PRIMARY KEY (ID)
);

Ziel ist es nun ein Java-Programm zu schreiben, welches eine Verbindung zur Datenbank herstellt und über Kommandozeilenparameter bestimmte Funktionalitäten bereit stellt. Die Aufgabe, die mir Probleme bereitet ist folgende:
Mit Kommandozeilenparametern der Form
-insert <name> <lebensalter> <besitzer>
soll ein neues Tupel in der Tabelle Hund angelegt werden konnen. 

Ich hab versucht, diese Parameter zu speichern und dann an VALUES zu übergeben aber das klappt nicht, und wenn ich bei VALUES z.B: args[1] übergebe klappt das auch nicht. Ich hoffe, dass mir jemand sagen kann, wie man einen Kommandozeilenparameter als Wert an VALUES übergeben kann.


```
package aufgabe26;

import java.sql.*;

public class Aufgabe26 {

    public static void main(String[] args) {
        
        if (args.length == 0) {
            System.out.println("Kein Kommandozeilenparameter übergeben!");
            return;
        }
        
        try {
           
        Class.forName("com.mysql.jdbc.Driver");
        
        Connection c = DriverManager.getConnection("jdbc:mysql://educos-srv01.informatik.uni-augsburg.de:3306/theDatabase", "student", "inFormatik2");
    
        Statement abfrage = c.createStatement();
        
        if (args[0].equals("-showALL")) {
            
            String befehl = "SELECT * FROM Hund";
            ResultSet ergebnis = abfrage.executeQuery(befehl);
            while (ergebnis.next()) {
                System.out.println(ergebnis.getInt(1)
                        + ", " + ergebnis.getString(2)
                        + ", " + ergebnis.getInt(3)
                        + ", " + ergebnis.getString(4));
            }
        }
        
        if (args[0].equals("-insert")) {
            String name = new String(args[2]);
            int alter = Integer.parseUnsignedInt(args[3]);
            String besitzer = new String(args[4]);
            String befehl = "INSERT INTO Hund (name, lebensalter, besitzer) VALUES ('name', alter, 'besitzer')";
            abfrage.executeUpdate(befehl);
        }
        
        }

        catch (ClassNotFoundException e) {
            System.out.println(e.getMessage());
        }
        catch (SQLException e ) {
            System.out.println(e.getMessage());
        }
    }

}
```

Verwendete IDE: Eclipse


Viele Greetz
Walter


----------



## fhoffmann (4. Jun 2015)

Hallo,

der Fehler liegt hier:
[Java]
String befehl = "INSERT INTO Hund (name, lebensalter, besitzer) VALUES ('name', alter, 'besitzer')";
[/Java]

Innerhalb des Strings werden die Variablennamen nicht durch ihren Wert ersetzt.
Also stattdessen: 

[Java]
String befehl = "INSERT INTO Hund (name, lebensalter, besitzer) VALUES ('" + name + "', " + alter + ", '" + besitzer + "')";
[/Java]

Noch besser wäre es , mit einem PreparedStatement zu arbeiten.

Gruß
Fritz


----------



## Walter91 (4. Jun 2015)

Hallo Fritz,

super jetzt klappt es.

Vielen Dank 
Das mit dem PreparedStatement werd ich auch mal ausprobieren.

Gruß
Walter


----------

