I want to insert a whole set of values in my table in MySQL (e.g.
CREATE TABLE Flughafen ( Abkuerzung VARCHAR(3) NOT NULL, Zeitzone INT, Standort VARCHAR(255), Name VARCHAR(255), Flughafensteuer DOUBLE, Sicherheitsgebuehren DOUBLE, PRIMARY KEY (Abkuerzung) ); INSERT INTO Flughafen VALUES ("AMK", 69, "Germany", "Munich", 30, 50);
This works in MySQL Workbench 8.0 but not in my Java Code. I read the JavaDoc about prepared Statements but I didn’t find any clues on inserting values if I don’t know the type a priori. My Java code looks like this:
// Laden des JDBC-Treiber für MySQL String driverClass = "com.mysql.cj.jdbc.Driver"; String url = "jdbc:mysql://127.0.0.1:3306/wwfsaew"; String username = "root"; try { //Laden des Treibers fuer Java und MySQL Class.forName(driverClass); } catch (ClassNotFoundException exc) { System.out.println("Treiber fehlt"); System.exit(1); } try { // Aufbau der Verbindung connect = DriverManager.getConnection(url, username, password); System.out.println("------------ SQL Befehl wird verschickt ---------------"); } catch (SQLException SQLe) { System.out.println("Verbinden fehlgeschlagen bitte noch einmal probieren!"); SQLe.printStackTrace(); System.exit(5); } //Erlaubnis fuer Abfragen an die Datenbank statement = connect.createStatement(); //Vorabfrage der Tabelle für spätere Eingabe des Benutzers resultSet = statement.executeQuery("SELECT * FROM " + Tabelle); System.out.println("--- DatenbankZugriff wird initiiert ---"); String Insertabfrage = resultSet.getMetaData().getColumnName(1); String Fragezeichen = "?"; for (int i = 2; i<= resultSet.getMetaData().getColumnCount(); i++) { Insertabfrage += (", " + resultSet.getMetaData().getColumnName(i)); Fragezeichen += ",?"; } System.out.println(Insertabfrage); System.out.println("Werte bitte in richtiger Ordnung eingeben und Werte : "); Scanner sc = new Scanner(System.in); String SQLInsert = sc.nextLine(); System.out.println(SQLInsert); ---------------------------------------------------------------- Here I want to handle the Statement and insert it into my database. String sql = "INSERT INTO " + Tabelle + " (" + Insertabfrage + ") VALUES (" + " values (" + Fragezeichen + ")"; PreparedStatement preparedStatement = connect.prepareStatement(sql); ---------------------------------------------------------------- resultSet = statement.executeQuery("INSERT INTO " + Tabelle + " (" + Insertabfrage + ") VALUES (" + SQLInsert + " );"); //Ausgaben der Abfrage antworten mit Meta Daten System.out.println("--- SQL Befehl wurde erfolgreich umgesetzt! ---");
I tried many things like
resultSet = statement.executeQuery("INSERT INTO " + Tabelle + " (" + Insertabfrage + ") VALUES (" + SQLInsert + " );");
So my Question is, is there a possibility to get the Datatype of the columns and insert it into my database wwfsaew? Something like this:
preparedStatement.setUniversal(1, InputString(1)); preparedStatement.setUniversal(2, InputString(2)); preparedStatement.setUniversal(3, InputString(3));
Advertisement
Answer
I found the problems:
- String sql was flawed –> double values().
- There wasn’t an execute command for preparedStatement
- for loop from XtremeBaumer in the comments
- ExceptionHandling for Foreign Keys I hope this helps somebody in the future 🙂