我有一个应用程序,用户输入用户名,应用程序从数据库查询返回用户ID。
我遇到的问题是如何在userID
中显示userIDLbl
?
代码如下:
JButton currentRoleBtn = new JButton("Get ID");
currentRoleBtn.setBounds(50, 50, 150, 30);
currentRoleBtn.setToolTipText("Press to get the ID for the user");
currentRoleBtn.addActionListener(new ActionListener()
{
public void actionPerformed (ActionEvent e)
{
int userID;
String userName = adUserNameTxt.getText().toString();
StringBuffer getRolesQuery1 = new StringBuffer("select id from hib.person where name = '");
getRolesQuery1.append(userName).append("'");
try
{
ResultSet rs = stmt.executeQuery(getRolesQuery1.toString());
try
{
while (rs.next())
{
userID = rs.getInt(1);
System.out.println("The User ID is: " +userID);
}
}
finally
{
rs.close();
}
}
catch (SQLException e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
//Create UserID label
JLabel userIDLbl = new JLabel("User ID is: " +userID);
userIDLbl.setFont(new Font("Georgia", Font.PLAIN, 14));
userIDLbl.setForeground(new Color(50,50, 25));
userIDLbl.setBounds(25, 200, 200, 30);
答案 0 :(得分:3)
将userID声明为类级别变量。
所以你可以在任何其他地方使用它,最终在 try catch 块之外访问它,但是你不会< / strong>能够更改此变量的值。
class User
{
private int userID;
//Constructors
public void actionPerformed (ActionEvent e)
{
}
}
答案 1 :(得分:2)
变量是各自代码块的本地变量。如果你想在try-catch之外使用它们,要么在块之外定义它们,然后在里面使用它们,或者,如注释所示,在try块中移动更多的代码。
编辑:或者更好,正如其他两个答案所说的那样,让它成为一个班级成员。
答案 2 :(得分:1)
使其成为类成员变量。
class Foo
{
private int userID;
...
//getters setters
public void actionPerformed (ActionEvent e)
{
...
}
}
永远不要这样做
StringBuffer getRolesQuery1 = new StringBuffer("select id from hib.person where name = '");
getRolesQuery1.append(userName).append("'");
您无法信任用户输入。你想要这样的东西来帮助缓解SQL注入:
PreparedStatement statement = conn.prepareStatement("select id from hib.person where name = ?");
statement.setString(1,userName);
答案 3 :(得分:1)
通常,如果在{}
范围内声明变量,则该范围外的变量不可访问。这适用于C,C ++,Java和许多其他语言。
在Java中,如果您在范围之外声明变量,请仅在条件范围内设置它(由于if
或try/catch
可能是“有条件的”),然后在离开该条件范围后尝试引用该变量,编译器和验证器将抱怨该变量未初始化。
SomeClass someVar;
try {
someVar = someValue;
someOtherStuff;
...
}
catch ... {
...
}
someOtherVar = someVar; // This access IS NOT allowed, because "someVar" is not certain to be initialized if an exception occurs.
因此,一般来说,您的解决方案是:
SomeClass someVar = null; // Or some other appropriate default value
try {
someVar = someValue;
someOtherStuff;
...
}
catch ... {
...
}
someOtherVar = someVar; // This access IS allowed, because someVar is initialized, at least to "null".
(请注意,这并未说明您使用try / catch是否合适,或者错误是否得到妥善处理 - 这是一个单独的问题。)