Veröffentlicht 13. Januar 201411 j Nabend, hab mal eine Frage zu meinem Code. Datenbank abfragen klappt soweit. Jetzt ist die Frage wie ich Inserts in die Datenbank einfügen kann. Hab gelesen das es mit ResultSet nicht gehen soll, weiss dann aber auch nicht weiter...kann jmd helfen? LG //Schritt 1. Importieren der benötigten Pakete import java.sql.*; public class Adressliste2 { //JDBC Treibername und Datenbank URL static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; static final String DB_URL = "jdbc:mysql://localhost/adressen"; // Userdaten static final String USER = "root"; static final String PASS = "123456"; public static void main(String[] args) { Connection conn = null; Statement stmt = null; try{ //Schritt 2: Den JDBC Treiber registrieren Class.forName("com.mysql.jdbc.Driver"); //Schritt 3: Verbindung herstellen System.out.println("Verbindung zur Datenbank wird aufgebaut..."); conn = DriverManager.getConnection(DB_URL,USER,PASS); /*//Schritt 4: Datenbankabfrage ausführen System.out.println("Abfrage erstellen..."); Statement statement = conn.createStatement(); String sqlabfrage; sqlabfrage = "Select * from adressliste"; ResultSet rs = statement.executeQuery(sqlabfrage); */ // Datenbank ändern System.out.println("Inserts einfügen..."); Statement statement = conn.createStatement(); String sqlinsert; sqlinsert = "insert into adressliste values(3,'Jörg','Schulz','Abcweg',15,'Musterstadt',12345);"; ResultSet rs = statement.executeUpdate(sqlinsert); //STEP 5: Daten aus der Abfrage extrahieren while(rs.next()){ //Abfrage nach Spaltenname int idAdressliste = rs.getInt("idAdressliste"); String Vorname = rs.getString("Vorname"); String Nachname = rs.getString("Nachname"); String Straße = rs.getString("Straße"); int Hausnummer = rs.getInt("Hausnummer"); String Ort = rs.getString("Ort"); int PLZ = rs.getInt("PLZ"); //Ergebnisse anzeigen lassen System.out.print("id: " + idAdressliste); System.out.print(", Vorname: " + Vorname); System.out.print(", Nachname: " + Nachname); System.out.print(", Straße: " + Straße); System.out.print(", Hausnummer: " + Hausnummer); System.out.print(", Ort: " + Ort); System.out.println(", PLZ: " + PLZ); } //Schritt 6: Verbindungen schliessen rs.close(); statement.close(); conn.close(); }catch(SQLException se){ //JDBC Fehlermeldungen se.printStackTrace(); }catch(Exception e){ //Fehlermeldungen von Class.forName e.printStackTrace(); }finally{ //finally block used to close resources try{ if(stmt!=null) stmt.close(); }catch(SQLException se2){ } try{ if(conn!=null) conn.close(); }catch(SQLException se){ se.printStackTrace(); } }//ende try System.out.println("Goodbye!"); }//main }//Adressliste2
14. Januar 201411 j Autor Problem gelöst, hab den ganzen try block mit executeUpdate() nochmal reingemacht. Also einen für executeQuery() und einen für executeUpdate(). LG
14. Januar 201411 j Autor Nächste Frage, ist es möglich das ich für jeden typ (Abfrage und Insert) eine einzelne Methode erstelle? Komm da nicht weiter, bzw weiss nicht welchen return type ich wählen muss... LG
15. Januar 201411 j Verstehe nicht so ganz, was du meinst. Ein SELECT gibt in der Regel ein ResultSet oder einen vergleichbaren, tabellarisch anmutenden Datentyp zurück. Ein INSERT, UPDATE, DELETE gibt in der Regel nur ein Boolean zurück, ob die Operation erfolgreich war. Ggfs. einen Integer über die Anzahl der veränderten Rows, aber das ist mir bisher noch nicht untergekommen. Gruß, Goulasz
21. Januar 201411 j Auch denke bei INSERTs, sollten da Usereingaben drinnen sein, an die Möglichkeit der SQL-Injection. Hierbei können dir z.B. PreparedStatements schon Arbeit abnehmen. Dein SQL würde dann ca so lauten : PreparedStatement ps = connection.prepareStatement( "INSERT INTO test VALUES(?,?,?)"// wobei die ? die Anzahl der Spalten angeben. ); ps.setString(1, "Test1"); // Parameter werden übergeben ps.setInt(2, 0); // Parameter werden übergeben ps.setString(3, "Test2"); // Parameter werden übergeben ResultSet rs = ps.executeQuery(); //Statement wird ausgeführt. Und natürlich kannst du zwei Funktionen erstellen, welche unterschiedliche SQL-Statements abfeuern. Du musst dann nur selbst dafür sorgen wann du welche Funktion mit welchen Parametern aufrufst(sofern ich dich richtig verstanden habe).
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.