当前位置: 代码迷 >> J2SE >> 用户登入代码有关问题,多谢大家了
  详细解决方案

用户登入代码有关问题,多谢大家了

热度:82   发布时间:2016-04-23 20:30:10.0
用户登入代码问题,谢谢大家了!
用户登入代码 ,问题是:一直显示“登陆失败”,   如何能显示“登陆成功”呢?(已将正确用户名,密码都写在程序中了)

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
String Myusername="admin";
String Mypassword="admin";

User user=new User(Myusername,Mypassword);

DbUtil dbutil=new DbUtil ();
UserDao userdao=new UserDao();
 try {
   User curentUser=userdao.login(dbutil.getCon(),user);
   if(curentUser!=null){
   JOptionPane.showMessageDialog(null,  "登陆成功!");
   }

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
JOptionPane.showMessageDialog(null, "登陆失败");
}


          



}
以下为其他相关代码

User.java


package com.java1234.model;

public class User {

private int ID;
private String userName;
private String password;


public User() {
super();
// TODO Auto-generated constructor stub
}

public User(String UserName, String password) {
super();
this.userName = UserName;
this.password = password;
}

public int getID() {
return ID;
}
public void setID(int iD) {
ID = iD;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}

}



DbUtil.java

package com.java.util;

import java.sql.Connection;
import java.sql.DriverManager;

public class DbUtil {

private String dbUrl="jdbc:mysql://localhost:3306/db_book";
private String dbUserName="root";
private String dbPassword="123456";
private String jdbcName="com.mysql.jdbc.Driver";


public Connection getCon() throws Exception{

Class.forName(jdbcName);
Connection con=DriverManager.getConnection(dbUrl, dbUserName, dbPassword);

return con;

}

public void closeCon(Connection con) throws Exception{

if(con!=null)
{

con.close();

}


}


UserDao.java


package com.java1234.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.java1234.model.User;

public class UserDao {
public User login(Connection con ,  User user) throws Exception {
User resultUser=null;
String sql="select * from t_user where userName=?";
PreparedStatement pstmt=con.prepareCall(sql);
pstmt.setString(1, user.getUserName());
//pstmt.setString(2, user.getPassword());
ResultSet rs=pstmt.executeQuery();
if(rs.next()){

resultUser=new User();
resultUser.setUserName(rs.getString("userName"));
//resultUser.setPassword(rs.getString("userName"));


}


return resultUser;


}

}
------解决方案--------------------
断点下 
ResultSet rs=pstmt.executeQuery();
if(rs.next()){

看这两行执行后,rs 结果集中有记录没,如果没有记录,那么rs.next 便为false 这样返回的resultUser 便为 User resultUser=null; 定义的null了
------解决方案--------------------
有异常信息没,可以参考下;
------解决方案--------------------
debug断点查值
或者
复制你的sql直接查询数据库看能输出结果不
------解决方案--------------------
从代码逻辑来看 是数据库端抛异常了
原因:从判断逻辑来看只有异常的时候才会提示登录失败 如果用户为空就不知道干嘛了。。。。。
然后看数据库端的代码 只有数据库抛了异常才会有异常抛出 lz没有以自己的逻辑抛出来的异常 
顾得出结论是数据库端逻辑抛异常了 还有lz确定这代码能编译通过?jButton2ActionPerformed这个方法里面的try 我怎么看都多了个}  在catch前面。。。。
------解决方案--------------------
你的login函数查询的时候有问题。
PreparedStatement pstmt=con.prepareCall(sql);
prepareCall是调用存储过程的,如果要使用con.prepareCall(sql);,你的sql的写法应该是String sql = "{call t_user(?)}";其中t_user是你的一个存储过程。

你可以将PreparedStatement pstmt=con.prepareCall(sql);
改成:PreparedStatement pstmt=con.prepareStatement(sql);
或者修改你的sql语句。
  相关解决方案