获取JComponent的名称并在PreparedStatement

时间:2016-03-20 11:26:47

标签: java swing jdbc prepared-statement

好的,所以这就是我到目前为止所做的工作。但是,我无法指定?parameter int 10boolean转换为int的{​​{1}}(或setInt()}设置(通过getName())。我尝试使用variable name查看组件null,但在打印时会返回ps.setInt(1,valueOfUnknownCheckbox);

  1. 如果我无法正确指定1或0的值来自哪个文本框,我如何将复选框的值作为参数分配给我的PreparedStatement?

    //need to put the correct checkbox as 2nd argument. Java Reflection

  2. 我看到了一些关于使用Java Reflection的信息,我完全不熟悉这些信息。有没有办法没有使用List

  3. 某些复选框值未转到正确的数据库表的列。

    我希望你能帮助我们。我希望能够使用private void saveAdminPermissions(){ List<Component> adminPermissionsChbxs = fm.getComponentsAsList(administrationPermissionsCheckBoxPanel); Boolean bool = null; String updateSQL = "UPDATE allusers_admin_permissions SET CURC_BTN=?, DISCOUNTS_BTN=?, SECTIONS_BTN=?," + " USERS_BTN=?, SCHEDULING_BTN=?, YRLEVELS_BTN=?, ACCTG_BTN=? WHERE USERID=? "; try(Connection con = DBUtil.getConnection(DBType.MYSQL); PreparedStatement ps = con.prepareStatement(updateSQL);) { int x=1; for(Component c : adminPermissionsChbxs){ if(c instanceof JCheckBox){ bool = ( (JCheckBox)c ).isSelected(); JOptionPane.showMessageDialog(null,"Name: "+ ((JCheckBox)c).getName() ); JOptionPane.showMessageDialog(null,bool); } //--end of if int boolToInt = (bool)?1:0 ; ps.setInt(x, boolToInt); x++; }//--end of forloop ps.setInt(8, um.getIdOfSelected(usersList)); ps.executeUpdate(); JOptionPane.showMessageDialog(null,"Update successful"); }catch(SQLException e){ JOptionPane.showMessageDialog(null,"Error@saveAdminPermissions\n"+ e.getMessage()); } }//--end of method 从容器中收集组件以减少代码行。

    这是我的代码。

    typedef struct _OVERLAPPED {
      ULONG_PTR Internal;
      ULONG_PTR InternalHigh;
      union {
        struct {
          DWORD Offset;
          DWORD OffsetHigh;
        };
        PVOID  Pointer;
      };
      HANDLE    hEvent;
    } OVERLAPPED, *LPOVERLAPPED;
    

    感谢。

1 个答案:

答案 0 :(得分:2)

有几种方法可以:

  • 不是循环查看视图组件,而是创建具有List<Boolean>等状态集合的权限模型。如How to Use Check Boxes所示,让每个JCheckBox都有ItemListener更新Boolean中的List值;看到一个例子here。使用列表构建PreparedStatement

  • 或者,将权限说明和状态存储在合适的TableModel中,并使用JTable作为视图。如How to Use Tables: Concepts: Editors and Renderers中所述,类型Boolean的模型值的默认渲染器/编辑器是一个复选框。渲染器和编辑器都不记得渲染或编辑单元格值的调用之间的值,但TableModel 底层的表必须这样做。引用了一些指南和典型示例here。您应该可以调用表的getValueAt()方法来查找特定行和列中所需单元格的当前设置,如here所示。