2016-07-21 10 views
0

In meinem Projekt möchte ich die Klassen planen und hier ist meine GUI. PICWie speichern Sie die ausgewählten Kontrollkästchen Elemente in JTable zu MySQL mit Java?

Kann mir jemand sagen, wie man den geprüften Wert in der MySQL-Datenbank speichert?

Das ist mein speichern Button-Code:

private void saveActionPerformed(java.awt.event.ActionEvent evt) {          
    try{ 
     String sql="insert into batch (course_code,batch_number,time,"+ time_table.getColumnName(time_table.getSelectedColumn()).toLowerCase()+")values(?,?,?,?)"; 

     pst=conn.prepareStatement(sql); 

     String value1=course_code.getSelectedItem().toString(); 
     pst.setString(1,value1); 

     String value2=course_code.getSelectedItem().toString(); 
     pst.setString(2, value2+"-"+year.getText()+"-"+group_no.getText()); 

     String value3=time_chooser.getSelectedItem().toString(); 
     pst.setString(3, value3); 

     //String value4 = time_table.getModel().getValueAt(time_table.getSelectedRow(), 0).toString(); 
    // pst.setString(4, value4); 

    int a=time_table.getSelectedRow(); 
    int b=time_table.getSelectedColumn(); 
    String c=time_table.getModel().getValueAt(a, 0).toString(); 


      for(int i = 1 ; i < a ; i++) 
       { 
       for(int j = 1 ; j < b ; j++) 
        { 
        Boolean val1 = (Boolean)time_table.getModel().getValueAt(a, b); 
        if(Boolean.TRUE.equals(val1)) { 
        pst.setString(4, c); 
         } 
        } 
       } 

    pst.execute(); 
     JOptionPane.showMessageDialog(null, "Successfully Inserted"); 
    } 
    catch(Exception e){ 
     JOptionPane.showMessageDialog(null, e); 
    } 
} 

Ich möchte so etwas wie dieses. enter image description here Dieser Fehler wird angezeigt. enter image description here

+1

MySQL hat einen Booleschen Datentyp. So können Sie nur wahr oder falsch in die Datenbank einfügen: D –

+0

Ja, ich weiß. Aber ich weiß nur, wie man die jtable checkbox Werte nimmt. – lakshi

+0

Haben Sie einen Datenbankverbindungscode oder etwas ähnliches? Es würde wirklich helfen, Ihre Frage zu beantworten ... BTW .: Sie können sie als Integer einfügen (0 = FALSE, 1 = TRUE), wenn das das ist, was Sie meinten. –

Antwort

2

ich hoffe, ist, was Sie wollen (Es sollte so lange wie die Spalten in Ihrer Datenbank den gleichen Namen wie die Spalten in der Tabelle arbeiten):

String sql="insert into batch (course_code,batch_number,time,"+ time.getColumnName(time.getSelectedColumn()).toLowerCase() +")values(?,?,?,?)"; 

    String value4 = time.getModel().getValueAt(time.getSelectedRow, 0); 
    pst.setString(4, value4); 

Eine kleine Erklärung:

time.getColumnName(time.getSelectedColumn()).toLowerCase() 

sollte den Tag zurückgeben, den Sie in Kleinbuchstaben ausgewählt haben. Es entspricht dem Namen Ihrer Spalte in Ihrer Datenbank ("Montag", "Mittwoch"). Jetzt können Sie die Zeit in die Tabelle einfügen. Um dies zu tun, müssen Sie die ausgewählte Zeile und damit den Zellenwert aus der ersten Zelle Ihrer geprüften Zeile erhalten, die Ihre Zeit ist. Schließlich können Sie es in die Datenbank einfügen.

EDIT:

Kommentare anzeigen (Ich kann den Code testen Wenn es irgendwelche Fehler drin sind, pls lassen Sie mich wissen.):

private void saveActionPerformed(java.awt.event.ActionEvent evt) { 
     try{ 
      for(int i = 0 ; i < time_table.getModel().getRowCount() ; i++) 
      { 
       for(int j = 1 ; j < time_table.getModel().getColumnCount() ; j++) 
       { 
        String sql="insert into batch (course_code,batch_number,time,"+ time_table.getColumnName(j).toLowerCase()+")values(?,?,?,?)"; 

        pst=conn.prepareStatement(sql); 

        String value1=course_code.getSelectedItem().toString(); 
        pst.setString(1,value1); 

        String value2=course_code.getSelectedItem().toString(); 
        pst.setString(2, value2+"-"+year.getText()+"-"+group_no.getText()); 

        String value3=time_chooser.getSelectedItem().toString(); 
        pst.setString(3, value3); 

        String c=time_table.getModel().getValueAt(i, 0).toString(); 
        Boolean val1 = (Boolean)time_table.getModel().getValueAt(i, j); 
        System.out.println(val1 + "\t"); 
        if(Boolean.TRUE.equals(val1)) { 
         pst.setString(4, c); 
         pst.executeUpdate(); 
         pst.close(); 
         JOptionPane.showMessageDialog(null, "Successfully Inserted"); 
        } 
        System.out.println(); 
       } 
       catch(Exception e){ 
        JOptionPane.showMessageDialog(null, e); 
       } 
      } 
     } 
+0

Ich habe den Code ausprobiert. Aber java.lang.ClassCastException: java.lang.String kann nicht in javax.swing.JLabel Fehler-Popups umgewandelt werden. Kannst du helfen, warum es erscheint? – lakshi

+0

Okay, entfernen Sie einfach den Cast. Ich dachte, dass es ein JLabel zurückgeben würde, aber ich gebe eine Zeichenkette zurück, also können Sie die Zeichenkette gerade verwenden, keine Notwendigkeit für eine Besetzung. Ich habe meinen Beitrag bearbeitet. –

+0

Vielen Dank, mein Herr. Es funktioniert perfekt, wie ich es brauche. :) Und danke für die klare Erklärung des Codes. – lakshi

0

Nehmen Sie es wie ein String und speichern Sie es in der Datenbank in einer String-Variable? Nicht ganz sicher ob es überhaupt möglich ist. Hoffnung kann helfen.