验证用户名和密码的简单问题,有代码!!大家帮忙看看吧!奇怪的错误...
当我在前台只是调用isPasswdOk()函数时能够通过。即:
if(isIn.isPasswdOk(syslogin.getUserName(),syslogin.getPassWd())){//right
但两个同时调用时却报错了。
if(isIn.isUsernameOk(syslogin.getUserName())){//用户名判断
if(isIn.isPasswdOk(syslogin.getUserName(),syslogin.getPassWd())){//密码判断
代码如下:(会不会使数据库关闭不当导致的错误呢?)
用户登录类:
package cn.com.jysky.news.manage;
import java.sql.*;
import org.apache.log4j.Logger;
import cn.com.jysky.datasource.*;
import cn.com.jysky.log4j.UseLog4j;
import cn.com.jysky.common.CodeFilter;
import cn.com.jysky.persistence.NEWSAdmin;
public class ISLogin {
private DBConnection db=null;
private static Logger logger=UseLog4j.getLogInstance( "ISLogin ");
//判断用户名。
public boolean isUsernameOk(String userName){
boolean isOk=false;
if(db==null)
db=DBConnection.getInstance();
String strSql = "select * from newsadmin where userName= ' "+userName+ " '; ";
try{
//db.prepareStatement(strSql);
ResultSet rs= db.read(strSql);
try{
rs.last();
//getRow()检索当前行编号。第一行为 1 号,第二行为 2 号,依此类推。
if(rs!=null&&rs.next()){
isOk=true;
rs.close();
}
}catch(SQLException e){
e.printStackTrace(System.out);
logger.info( "查询用户返回指针时出现异常! ");
}
}
catch(Exception e){
e.printStackTrace(System.out);
logger.info( "查询用户时出现异常! ");
}
finally{
db.stop();
}
return isOk;
}
//判断密码。
public boolean isPasswdOk(String userName,String passWd){
boolean isOk=false;
if(db==null)
db=DBConnection.getInstance();
String strSql= "select * from newsadmin where userName= ' "+userName+ " ' and passWd= ' "+passWd+ " '; ";
try{
//db.prepareStatement(strSql);
//db.setString(1, CodeFilter.toHtml(strSql));
//db.setString(2, CodeFilter.toHtml(strSql));
ResultSet rs= db.read(strSql);
try{
rs.last();
if(rs!=null&&rs.next()){
isOk=true;
rs.close();
}
}catch(SQLException e){
e.printStackTrace(System.out);
logger.info( "查询密码返回指针时出现异常! ");
}
}
catch(Exception e){
e.printStackTrace(System.out);
logger.info( "查询用户密码时出现异常! ");//同时调用两个函数时捕获这个异常。单独调用该方法不会捕获该异常。
}
finally{
db.stop();
}
return isOk;
}
}
数据库管理类:
package cn.com.jysky.datasource;
import java.sql.*;
import org.apache.log4j.*;
import cn.com.jysky.log4j.*;
/**
* @author 彭金艳 E-mail: pongjy123@163.com
* @version 创建时间:2007-1-3 下午04:49:58
* 连接数据库实例.
*/
public class DBConnection {
//静态工厂模式的对象.
private static DBConnection db=null;
//数据库连接对象.
private static Connection conn=null;
private Statement stmt=null;
private static Logger logger=UseLog4j.getLogInstance( "DBConnection ");
//构造函数.
private DBConnection(){
try{
if(conn==null){
Class.forName( "com.mysql.jdbc.Driver ");
conn=DriverManager.getConnection( "jdbc:mysql://localhost:3306/jynews ", "root ", "111111 ");
//创建一个 Statement 对象来将 SQL 语句发送到数据库。
stmt=conn.createStatement();
}
}catch(Exception e){
e.printStackTrace();
logger.info( "加载驱动的时候出错! ");
}
}
//取得DBConnection实例.
public static DBConnection getInstance(){
if(db==null){
try{
db=new DBConnection();
}catch(Exception e){
//conn=null;
logger.info( "数据库连接出错! ");
return null;
}
}
return db;
}
//执行插入,删除和更新操作.
synchronized public void execute(String sql){
try{
sql=new String(sql.getBytes( "GBK "), "ISO8859_1 ");
Statement stmt = conn.createStatement();
stmt.executeUpdate(sql);
}catch(Exception e){
e.printStackTrace(System.out);
logger.info( "数据库插入数据时出错! ");
}
}
//执行查询操作.
synchronized public ResultSet read(String sql){
ResultSet rs=null;
try{
if(stmt!=null){
sql=new String(sql.getBytes( "ISO-8859-1 "), "GB2312 ");
rs=stmt.executeQuery(sql);
}else{
rs=null;
}
}catch(Exception e){
e.printStackTrace(System.out);
logger.info( "编码或查询出错! ");
}
return rs;
}
//终止数据库连接.
synchronized public void stop(){
try{
if(conn!=null){
conn.close();
}
if(stmt!=null){
stmt.close();
}
}catch(Exception e){
e.printStackTrace();
logger.info( "关闭数据库时出错! ");
}finally{
conn=null;
stmt=null;
}
}
}
前台用jsp调用通过表单提交后用如下代码验证:
<jsp:useBean id= "syslogin " scope= "page " class= "cn.com.jysky.persistence.NEWSAdmin "/>
<jsp:setProperty name= "syslogin " property= "* "/>
<jsp:useBean id= "isIn " class= "cn.com.jysky.news.manage.ISLogin "/>
<jsp:useBean id= "SessionManager " class= "cn.com.jysky.servlet.SessionManager "/>
<body bgcolor= "#799ae1 ">
<%
if(isIn.isUsernameOk(syslogin.getUserName())){//用户名判断
if(isIn.isPasswdOk(syslogin.getUserName(),syslogin.getPassWd())){//密码判断
SessionManager.setSession(session, "user ",syslogin.getUserName());
DOServlet.responseUrl(response, "default.jsp ");
}
else{
...
}
}
else{
...
}
%>
[解决办法]
把错误信息贴出来啊老大
------解决方案--------------------
楼主啊,是让你贴e.printStackTrace(System.out);打印出来的异常信息,不然怎么知道具体问什么问题啊