Java 获取JComponent的名称并在PreparedStatement中指定为参数

Java 获取JComponent的名称并在PreparedStatement中指定为参数,java,swing,jdbc,prepared-statement,Java,Swing,Jdbc,Prepared Statement,好的,这就是我到目前为止所做的,它是有效的。但是,我无法指定设置int 1或0(boolean转换为int)的?(或参数)。我尝试使用getName()查看组件变量名,但打印时返回null 如果无法正确指定1或0的值来自哪个文本框,如何将复选框的值指定为PreparedStatement的参数 ps.setInt(1,值未知复选框)//需要将正确的复选框作为第二个参数。 我看到了一些关于使用Java反射的信息,我对这些信息完全不熟悉。有没有办法不使用Java反射 某些复选框值不会进入正确的数据库

好的,这就是我到目前为止所做的,它是有效的。但是,我无法指定设置
int 1
0
boolean
转换为
int
)的
(或
参数
)。我尝试使用
getName()
查看组件
变量名
,但打印时返回
null

  • 如果无法正确指定1或0的值来自哪个文本框,如何将复选框的值指定为PreparedStatement的参数

    ps.setInt(1,值未知复选框)
    //需要将正确的复选框作为第二个参数。

  • 我看到了一些关于使用
    Java反射的信息,我对这些信息完全不熟悉。有没有办法不使用
    Java反射

  • 某些复选框值不会进入正确的数据库表列

    我希望你们能帮我,伙计们。我希望能够使用
    List
    从容器中收集组件,以减少代码行

    这是我的密码

    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
    
    private void saveAdminPermissions(){
    List administrationpermissionschbxs=fm.getComponentsAsList(administrationPermissionsCheckBoxPanel);
    布尔布尔布尔=null;
    字符串更新SQL=
    “更新allusers\u admin\u权限集CURC\u BTN=?,折扣\u BTN=?,节\u BTN=?,”
    +“USERS_BTN=?,SCHEDULING_BTN=?,YRLEVELS_BTN=?,ACCTG_BTN=?其中USERID=?”;
    try(Connection con=DBUtil.getConnection(DBType.MYSQL);
    PreparedStatement ps=con.prepareStatement(updateSQL);)
    {
    int x=1;
    用于(组件c:adminPermissionsChbxs){
    if(JCheckBox的c实例){
    bool=((JCheckBox)c).isSelected();
    showMessageDialog(null,“名称:”+((JCheckBox)c.getName());
    showMessageDialog(null,bool);
    }//-如果结束
    int boolToInt=(bool)?1:0;
    ps.setInt(x,boolToInt);
    x++;
    }//--前循环结束
    ps.setInt(8,um.getIdOfSelected(usersList));
    ps.executeUpdate();JOptionPane.showMessageDialog(null,“更新成功”);
    }捕获(SQLE异常){
    JOptionPane.showMessageDialog(空,“Error@saveAdminPermissions\n“+e.getMessage());
    }
    }//--方法结束
    

    谢谢

    有几种可能的方法:

    • 不要在视图组件之间循环,而是创建一个具有状态集合的权限模型,例如
      List
      。如中所示,让每个
      JCheckBox
      都有一个
      itemstener
      ,它更新
      列表中的
      布尔值;我们可以看到一个例子。在构造
      PreparedStatement
      时使用该列表

    • 或者,将权限描述和状态存储在适当的位置,并使用作为视图。如中所述,类型为
      Boolean
      的模型值的默认呈现器/编辑器是一个复选框。渲染器和编辑器都不会记住渲染或编辑单元格值的调用之间的值,但是
      TableModel
      下的表必须记住。引用了一些指南和一个典型示例。您应该能够调用表的
      getValueAt()
      方法来查找特定行和列中所需单元格的当前设置,如图所示


      • 有几种可能的方法:

        • 不要在视图组件之间循环,而是创建一个具有状态集合的权限模型,例如
          List
          。如中所示,让每个
          JCheckBox
          都有一个
          itemstener
          ,它更新
          列表中的
          布尔值;我们可以看到一个例子。在构造
          PreparedStatement
          时使用该列表

        • 或者,将权限描述和状态存储在适当的位置,并使用作为视图。如中所述,类型为
          Boolean
          的模型值的默认呈现器/编辑器是一个复选框。渲染器和编辑器都不会记住渲染或编辑单元格值的调用之间的值,但是
          TableModel
          下的表必须记住。引用了一些指南和一个典型示例。您应该能够调用表的
          getValueAt()
          方法来查找特定行和列中所需单元格的当前设置,如图所示


        这与OP的问题有什么关系?他对JCheckBox感兴趣,而不是JTable。这与OP的问题有什么关系?他对JCheckBox感兴趣,而不是JTable。这可能对你有帮助。你的复选框是否在
        JTable
        ?@trashgood不,我只是把它们放在了一个JPanel里。还不熟悉JTables,但我开始研究它。@p3ace:我的错误;我已经更新了我的原始答案来讨论这两种可能性。这可能会对你有所帮助。你的复选框是否在
        JTable
        ?@trashgood不,我只是把它们放在了一个JPanel中。还不熟悉JTables,但我开始研究它。@p3ace:我的错误;我已经更新了我的原始答案来讨论这两种可能性。