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
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()
- 有几种可能的方法:
JTable
?@trashgood不,我只是把它们放在了一个JPanel里。还不熟悉JTables,但我开始研究它。@p3ace:我的错误;我已经更新了我的原始答案来讨论这两种可能性。这可能会对你有所帮助。你的复选框是否在JTable
?@trashgood不,我只是把它们放在了一个JPanel中。还不熟悉JTables,但我开始研究它。@p3ace:我的错误;我已经更新了我的原始答案来讨论这两种可能性。