我正在尝试使用Java构建登录UI。但是我的SQL身份验证存在问题
以下是代码:
public void actionPerformed(ActionEvent e){
if (e.getSource() == Login)
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con=DriverManager.getConnection("jdbc:odbc:MessageStore","sa","12345");
Statement cmd=con.createStatement();
ResultSet rs=cmd.executeQuery("select * from UserList where UserName='"+nameText.getText());
}
但是有一个警告“rs”: 不使用局部变量rs的值
如何解决这个问题?
或者是否有更直接的代码来实现SQL身份验证?
谢谢
答案 0 :(得分:1)
在大多数“不使用变量X的值”的情况下,您可以选择忽略该消息或删除对该消息的赋值。在这些情况下,您不会对值进行任何操作。
但是,在这种情况下,您只对数据库执行查询,但从不对结果执行任何操作。因此,您不知道您尝试验证的用户是否确实是有效用户。
因此,您必须使用变量“rs”来检查是否确实存在结果,并且允许用户登录。
public void actionPerformed(ActionEvent e){
if (e.getSource() == Login){
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // may not be needed since JDBC4
Connection con=DriverManager.getConnection("jdbc:odbc:MessageStore","sa","12345");
PrePareStatement cmd=con.prepareStatement("select * from UserList where username=?"); // safer, protect against
cmd.setString(1,nameText.getText());
ResultSet rs=cmd.executeQuery();
if( rs.next() ){
// username does exist, now check the password
}else{
// username does not exist
}
}catch(Exception e){}
}
}
答案 1 :(得分:0)
将ResultSet设为全局变量。
public void actionPerformed(ActionEvent ae) {
if (ae.getSource() != null) {
String connectionUrl = "jdbc:sqlserver://localhost:1420;" + "databaseName=TestsampleDB1;";
Connection con = null;
Statement stmt = null;
ResultSet rs = null;
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
System.out.println("Driver okay");
con = (Connection) DriverManager.getConnection("jdbc:odbc:MessageStore", "sa", "12345");
System.out.println("Connection Made");
PreparedStatement cmd = con.prepareStatement("select * from UserList where username=?");
if (rs.next()) {
// login user exist
} else {
// user doesn't exist}
}
} catch (Exception e) {
e.printStackTrace();
}
} }