用户登入代码 ,问题是:一直显示“登陆失败”, 如何能显示“登陆成功”呢?(已将正确用户名,密码都写在程序中了)
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语句。