【问题标题】:How to save the selected checkbox items in Jtable to mysql using java?java - 如何使用java将Jtable中选中的复选框项目保存到mysql?
【发布时间】:2016-11-24 13:07:20
【问题描述】:

在我的项目中,我想安排课程,这是我的 GUI。

谁能指导我,如何将检查的值保存到mysql数据库中?

这是我的保存按钮代码:

 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); 
    }
} 

我想要这样的东西。 弹出此错误。

【问题讨论】:

  • MySQL 具有布尔数据类型。所以你可以在数据库中插入真或假:D
  • 是的,我知道。但我只知道如何获取 jtable 复选框值。
  • 你有数据库连接代码之类的吗?回答你的问题真的很有帮助......顺便说一句:你可以将它们插入为整数(0 = FALSE,1 = TRUE),如果这就是你的意思。
  • 我已经编辑了我的问题。单击复选框时,我想将特定时间保存在数据库中。
  • 既然我回答了你所有的问题,你能把它标记为正确答案吗?谢谢:D

标签: java mysql jdbc netbeans


【解决方案1】:

我希望这是您想要的(只要您的数据库中的列与表中的列同名,它就可以工作):

    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);

一点解释:

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

应该以小写形式返回您选择的日期。它与数据库中列的名称相同(“星期一”、“星期三”)。现在您可以将时间插入表中。为此,您必须获取选定的行,然后您可以从选中行的第一个单元格中获取单元格值,即您的时间。最后你可以将它插入到数据库中。

编辑:

见cmets(我无法测试代码。如果有任何错误,请告诉我):

 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);
                }
            }
        }

【讨论】:

  • 我试过代码。但是 java.lang.ClassCastException:java.lang.String 不能转换为 javax.swing.JLabel 错误弹出窗口。你能解释一下它为什么会出现吗?
  • 好的,只需移除演员表。我认为它会返回一个 JLabel,但我确实返回了一个字符串,因此您可以只使用该字符串,而无需强制转换。我编辑了我的帖子。
  • 非常感谢先生。它可以根据我的需要完美运行。 :) 感谢您对代码的清晰解释。
  • 很高兴我能帮上忙。
  • 能否请您告诉我如果要选择多行,代码应该如何修改?
【解决方案2】:

把它当作一个字符串并将它保存在数据库中的一个字符串变量中?不太确定这是否可能。希望能帮上忙。

【讨论】:

    猜你喜欢
    • 2014-07-06
    • 2012-03-15
    • 1970-01-01
    • 1970-01-01
    • 2013-11-16
    • 1970-01-01
    • 2019-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多