2016-05-01 6 views
0

Ich habe Probleme beim Einfügen von Daten in eine Postgres-Tabelle, die mit Java erstellt wurde. Der erzeugte Tabellenteil des Codes funktioniert einwandfrei, nur wenn ich Werte in die Tabelle einfüge, passiert nichts. Der Code, den ich mit den Tabellendaten zu füllen bin mit ist:Durch Klicken auf die Schaltfläche macht das Einfügen in die Datenbank nicht?

//the first class code 
     stmt = c.createStatement();  
    JavaApplication8 dc = new JavaApplication8(); 
      String sql = "INSERT INTO records (start_date,hour,cell_name,Erlang,ErlangU,cell_type,freq_type) VALUES (?,?,?,?,?,?,?)"; 
     PreparedStatement pst = c.prepareStatement(sql); 
      pst.setInt(1, dc.time()); 
      pst.setInt(2,heure); 
      pst.setString(3, "fgf"); 
      pst.setFloat(4, 84/10); 
      pst.setFloat(5,dc.Hourly_Traffic_900); 
      pst.setInt(6, 1); 
      pst.setInt(7, 900); 

     stmt.execute(sql); 
     stmt.close(); 
      c.commit(); 
      c.close(); 
        }} catch (ClassNotFoundException | SQLException e) { 
      System.err.println(e.getClass().getName()+": "+ e.getMessage()); 
      System.exit(0); 
      } 
      System.out.println("Records created successfully");} 

//the jframe code 
     Connection conn = new DBConnection().Connect(); 
     private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           
     try { 

      float bsc = Float.parseFloat(jTextField1.getText()); 
      float cellsbsc = Float.parseFloat(jTextField2.getText());   
       float days = Float.parseFloat(jTextField3.getText()); 
     int tot_dense =(int) (bsc*cellsbsc) ; 
      JavaApplication8 dc = new JavaApplication8(); 
      Menu mm = new Menu(); 
        Connection c = null; 
      Statement stmt = null; 

      Class.forName("org.postgresql.Driver"); 
      c = DriverManager.getConnection("jdbc:postgresql://localhost:5432/Records", "postgres", "21262050"); 
      c.setAutoCommit(false); 
      System.out.println("Opened database successfully"); 

     String sql = "INSERT INTO records (start_date,hour,cell_name,Erlang,ErlangU,cell_type,freq_type) VALUES (?,?,?,?,?,?,?)"; 
      PreparedStatement pst = c.prepareStatement(sql); 
       if (mm.jRadioButton1.isSelected()&& mm.jButton1.isSelected()){ 

        for(int i=1; i<tot_dense+1; i++) 
        { 
         for(int d=1; d<days+1; d++) 

         { 
          dc.Day_900(); 

      pst.setInt(1,dc.time()); 
      pst.setInt(2,dc.heure); 
      pst.setString(3, "fgf"); 
      pst.setFloat(4, 84/10); 
      pst.setFloat(5,dc.Hourly_Traffic_900); 
      pst.setInt(6, 1); 
      pst.setInt(7, 900); 

      pst.execute(); 
         } 
        } 
+0

1) Verwenden Sie eine logische und konsequente Form Einrücken Code Linien und Blöcke. Die Einrückung soll den Codefluss leichter nachvollziehen lassen! 2) Um eine bessere Hilfe zu erhalten, sollten Sie ein [MCVE] oder [Short, Self Contained, Correct Example] (http://www.sscce.org/) veröffentlichen. –

+0

Diese Zeile 'JavaApplication8 dc = new JavaApplication8();' erscheint zweimal im obigen Code-Snippet. Ich vermute, das ist die Wurzel des Problems. Um den Verdacht auf begründeten Rat zu tauschen, poste diesen MCVE. –

+0

Es gibt einen Unterschied zwischen 'stmt' und' pst'. Versuchen Sie stattdessen, 'pst.executeUpdate' auszuführen – MadProgrammer

Antwort

1

So ein paar Dinge zeichnen sich sofort:

  1. Sie rufen Connection#setAutoCommit und setzen Sie ihn auf false, aber nie Allgemeinen Connection#commit
  2. nennen , sollten Sie PreparedStatement#executeUpdate statt execute anrufen. Es sollte keinen signifikanten Unterschied machen, aber executeUpdate gibt tatsächlich die Anzahl der Zeilen zurück, die vom Aufruf betroffen waren, was bei der Diagnose von Problemen hilfreich sein kann.
  3. Es gibt keinen Hinweis darauf, in Ihrem Code, die Sie tatsächlich alle Ihre Ressourcen schließen
  4. Sie execute in einer Schleife aufrufen, ist dies jedoch häufig für eine Batch-Update

Anstatt also eine mögliche Verwendung vorschlagen , könnten Sie so etwas wie ...

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { 

    float bsc = Float.parseFloat(jTextField1.getText()); 
    float cellsbsc = Float.parseFloat(jTextField2.getText()); 
    float days = Float.parseFloat(jTextField3.getText()); 
    int tot_dense = (int) (bsc * cellsbsc); 
    JavaApplication8 dc = new JavaApplication8(); 
    Menu mm = new Menu(); 

    try { 
     Class.forName("org.postgresql.Driver"); 
     try (Connection c = DriverManager.getConnection("jdbc:postgresql://localhost:5432/Records", "postgres", "21262050")) { 
      c.setAutoCommit(false); 
      System.out.println("Opened database successfully"); 

      String sql = "INSERT INTO records (start_date,hour,cell_name,Erlang,ErlangU,cell_type,freq_type) VALUES (?,?,?,?,?,?,?)"; 
      try (PreparedStatement pst = c.prepareStatement(sql)) { 
       if (mm.jRadioButton1.isSelected() && mm.jButton1.isSelected()) { 

        for (int i = 1; i < tot_dense + 1; i++) { 
         for (int d = 1; d < days + 1; d++) { 
          dc.Day_900(); 

          pst.setInt(1, dc.time()); 
          pst.setInt(2, dc.heure); 
          pst.setString(3, "fgf"); 
          pst.setFloat(4, 84/10); 
          pst.setFloat(5, dc.Hourly_Traffic_900); 
          pst.setInt(6, 1); 
          pst.setInt(7, 900); 

          pst.addBatch(); 
         } 
        } 
        pst.executeLargeBatch(); 
        //pst.executeBatch(); 
        c.commit(); 
       } 

      } 
     } catch (SQLException exp) { 
      exp.printStackTrace();Ï 
     } 
    } catch (ClassNotFoundException exp) { 
     exp.printStackTrace(); 
    } 
} 

Werfen Sie einen Blick auf The try-with-resources Statement für einige weitere Details tun.

alles, was gesagt haben, das nächste, was ist springt ...

JavaApplication8 dc = new JavaApplication8(); 
Menu mm = new Menu(); 

Sie mm mit dem Zustand einiger Radiobuttons zu überprüfen, so, es sei denn, Menu ein modaler Dialog von einigen ist Art ODER die Radio-Tasten standardmäßig ausgewählten Zustand ist auf true eingestellt, ist es unwahrscheinlich, dass der Update-Code jemals ausgeführt wird

Aber es hört nicht dort auf, ein Blick auf das erste Code-Snippet löst einige zusätzliche Fragen ..

try { 
    stmt = c.createStatement(); 
    JavaApplication8 dc = new JavaApplication8(); 
    String sql = "INSERT INTO records (start_date,hour,cell_name,Erlang,ErlangU,cell_type,freq_type) VALUES (?,?,?,?,?,?,?)"; 
    PreparedStatement pst = c.prepareStatement(sql); 
    pst.setInt(1, dc.time()); 
    pst.setInt(2, heure); 
    pst.setString(3, "fgf"); 
    pst.setFloat(4, 84/10); 
    pst.setFloat(5, dc.Hourly_Traffic_900); 
    pst.setInt(6, 1); 
    pst.setInt(7, 900); 

    stmt.execute(sql); 
    stmt.close(); 
    c.commit(); 
    c.close(); 
} catch (ClassNotFoundException | SQLException e) { 
    System.err.println(e.getClass().getName() + ": " + e.getMessage()); 
    System.exit(0); 
} 

Ich weiß nicht, was JavaApplication8 ist, aber es macht mir Sorgen, da Sie sich auf Informationen aus dieser Klasse verlassen.

Sie verwenden beide ein Statement und ein PreparedStatement, aber Sie execute nur die Statement, die keinen Sinn macht, da die Abfrage Setup für eine PreparedStatement ist, so dass nur ein Durcheinander von Verwirrung ist.

Sie schließen auch nur die Ressourcen, wenn alles tatsächlich erfolgreich ist, was passiert, wenn die Abfrage mit einer SQLException fehlschlägt? Diese Ressourcen bleiben offen! Siehe The try-with-resources Statement für eine bessere Lösung

Also, statt, der Code „könnte“ sehen aus wie etwas mehr wie ...

try (Connection c = DriverManager.getConnection("jdbc:postgresql://localhost:5432/Records", "postgres", "21262050")) { 
    JavaApplication8 dc = new JavaApplication8(); 
    String sql = "INSERT INTO records (start_date,hour,cell_name,Erlang,ErlangU,cell_type,freq_type) VALUES (?,?,?,?,?,?,?)"; 
    try (PreparedStatement pst = c.prepareStatement(sql)) { 
     pst.setInt(1, dc.time()); 
     pst.setInt(2, heure); 
     pst.setString(3, "fgf"); 
     pst.setFloat(4, 84/10); 
     pst.setFloat(5, dc.Hourly_Traffic_900); 
     pst.setInt(6, 1); 
     pst.setInt(7, 900); 
     pst.executeUpdate(); 
    } 
} catch (SQLException e) { 
    System.err.println(e.getClass().getName() + ": " + e.getMessage()); 
    System.exit(0); 
} 
System.out.println("Records created successfully"); 

zum Beispiel

Verwandte Themen