# Brauche Hilfe bei meinem Programm !



## Jeff123 (15. Apr 2018)

Hallo Freunde,

Ich hab ein Problem bei meinem Programm wo ich überhaupt nicht mehr weiter komme , es geht darum ein java Programm zu entwickeln welches eine Verbindung zu "phpMyAdmin" erstellt und dabei in meiner vorhandenen Tabelle(Students) die Daten Sätze einträgt


Für die Verbindung benutze ich MAMP, die auch soweit steht da ich die Daten Sätze abfragen kann.

Das Programm läuft...

Ich kann die komplette Tabelle abfragen(Students).

Aber ich kann nichts einfügen. Woran liegt das ?











```
package jdbcstudent;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;


public class JdbcStudent {
  
  
  

    public static void main(String[] args) {
      
        PreparedStatement preparedStatement = null;
        ResultSet rs;
      
        String read = "Select * FROM students";
      
        try (Connection conn = dbUtil.getConnection();
                PreparedStatement pr = conn.prepareStatement(read);
                ){
            rs = pr.executeQuery();
          
            while(rs.next() ) {
              
            System.out.println(rs.getInt("id") +" "+ rs.getString("first_name") +" "+ rs.getString("last_name") +" "+ rs.getDate("dob"));
              
            }
        }catch (SQLException e){
            e.printStackTrace();
        }
 
        Scanner input = new Scanner(System.in);
      
      
        System.out.println("Do you want to add new Students ?");
        String ans = input.nextLine();
      
        if(ans.equalsIgnoreCase("yes"))
        {
            System.out.println("Enter ID: ");
            String id = input.nextLine();
          
            System.out.println("Enter First Name: ");
            String first_name = input.nextLine();
          
            System.out.println("Enter Last Name: ");
            String last_name = input.nextLine();
          
            System.out.println("Enter your Date of Birth: ");
            String dob = input.nextLine();
          
            addStudents create = new addStudents();
            create.add(id, first_name, last_name, dob);
          
        }else{
            System.exit(1);
        }
      
    }
  
  
}
```


```
package jdbcstudent;

import java.sql.Connection;
import java.sql.PreparedStatement;

public class addStudents {
  
    public addStudents() {
      
    }
  
    public void add(String id, String first_name, String last_name, String dob){
      
        String sql = "INSERT INTO `students` (`id`, `first_name`, `last_name`, `dob`)  VALUES (? , ? , ? , ?) ";
      
        try (Connection conn = dbUtil.getConnection();
                PreparedStatement stmt  = conn.prepareStatement(dob);
                ){
            stmt.setString(1, id);
            stmt.setString(2, first_name);
            stmt.setString(3, last_name);
            stmt.setString(4, dob);
          
          
            stmt.execute();
          
          
        }catch (Exception e){
          
        }
      
    }
          
  
}
```


```
package jdbcstudent;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;


public class dbUtil
{
    private static final String USERNAME = "****";
    private static final String PASSWORD = "****";
    private static final String CONN = "jdbc:mysql://localhost/school"; // oder login anstatt dem school
    private static final String SCONN = "jdbc:sqlite:login.sqlite";
  
  
  



  

  
    public static Connection getConnection() throws SQLException{
      
        return DriverManager.getConnection(CONN, USERNAME, PASSWORD);
    }
}
```


----------



## Dompteur (15. Apr 2018)

In der Klasse "addStudents", Methode "add" solltest du die Exception auf keinen Fall verschlucken, sondern zumindest ausgeben.
Die Fehlermeldung sollte genau den Hinweis enthalten, den du brauchst.

Übrigens ist es üblich, Klassennamen mit großen Buchstaben anfangen zu lassen.


----------



## Jeff123 (15. Apr 2018)

Danke für deine Antwort,

das Programm gibt mir keine Fehlermeldung aus, es läuft fehlerlos.

Ich bekomme meine Tabelle ausgegeben und kann auch anschließend einen neuen Studenten eingeben, aber dieser wird nicht übernommen in meiner Datenbank, ich weiß auch nicht wohin die Eingabe verschwindet.


Bin noch ein blutiger Anfänger


----------



## Dukel (15. Apr 2018)

Btw. (damit das korrekt gelernt wird) PhpMyAdmin ist eine Adminoberfläche für MySql. D.h. dein Java Programm versucht eine Verbindung zu MySql aufzubauen.


----------



## Meniskusschaden (15. Apr 2018)

Jeff123 hat gesagt.:


> das Programm gibt mir keine Fehlermeldung aus, es läuft fehlerlos.


Wie sieht der verbesserte catch-Block denn jetzt aus (nach der Änderung die @Dompteur vorgeschlagen hat)?


----------



## Jeff123 (16. Apr 2018)

Ich habe versucht den "catch-Block" so zu verändern das ich irgendwie eine Ausgabe dazwischen schalten kann, bis jetzt aber erfolglos, und andere Ideen habe ich auch keine mehr.


Meine zweite Idee war das es an den Zugewiesenen rechten für meinen Benutzer liegen könnte in "phpMyAdmin".
Aber auch hier sind alle rechte komplett verteilt.


----------



## Dompteur (16. Apr 2018)

Jeff123 hat gesagt.:


> Ich habe versucht den "catch-Block" so zu verändern das ich irgendwie eine Ausgabe dazwischen schalten kann, bis jetzt aber erfolglos, und andere Ideen habe ich auch keine mehr.


Woran scheiterst du da ?
Es reicht, wenn du einfach "e.printStackTrace();" in the catch-Block reinschreibst. So wie du es in der Klasse "JdbcStudent" ja schon hast.

Es ist übrigens klar, dass du keine Fehlermeldung siehst. Der leere catch-Block verschluckt alles.

Bist du dir sicher, dass du im INSERT-Statement die Namen unter Apostroph setzen musst ?


----------



## Jeff123 (16. Apr 2018)

Dompteur hat gesagt.:


> Es reicht, wenn du einfach "e.printStackTrace();" in the catch-Block reinschreibst. So wie du es in der Klasse "JdbcStudent" ja schon hast



Nach dem ich die Veränderungen in meinem Code hinzugefügt habe , bekomme ich diese Fehlermeldung, mit der ich kaum etwas anfangen kann.








Dompteur hat gesagt.:


> Bist du dir sicher, dass du im INSERT-Statement die Namen unter Apostroph setzen musst ?



Ich hab es auch ohne Apostroph versucht, aber ohne Erfolg.


----------



## Meniskusschaden (16. Apr 2018)

Jeff123 hat gesagt.:


> Nach dem ich die Veränderungen in meinem Code hinzugefügt habe , bekomme ich diese Fehlermeldung, mit der ich kaum etwas anfangen kann.


Es bedeutet, dass du versuchst, in deinem SQL-Statement den Parameter mit der Nummer 1 zu setzen, obwohl im Statement gar keine Parameter vorgesehen sind.


----------



## Dompteur (16. Apr 2018)

Hast du schon versucht in der Anweisung 

```
PreparedStatement stmt  = conn.prepareStatement(dob);
```
statt dem "dob" die Variable "sql" einzusetzen ?


----------



## Jeff123 (17. Apr 2018)

Dompteur hat gesagt.:


> statt dem "dob" die Variable "sql" einzusetzen ?



Hab ich auch schon probiert , hat keine abhilfe geschaft. 
Ich weiß auch nicht mehr weiter was ich noch machen/versuchen kann.


----------



## Meniskusschaden (17. Apr 2018)

Jeff123 hat gesagt.:


> Dompteur hat gesagt.:
> 
> 
> > statt dem "dob" die Variable "sql" einzusetzen ?
> ...


Dann gibt es wohl noch ein anders Problem, das man analysieren muß. Da hilft der erste Stacktrace aber nicht mehr weiter, sondern der, der zu der Version mit "sql" statt "dob" gehört.


----------



## mrBrown (18. Apr 2018)

Poste doch den Code und den Stacktrace direkt, anstatt Screenshots davon zu.


In deinem sql-String fehlen ein paar ```, kann aber auch an der Auflösung des Bildes liege...


----------

