我写了个JSP用户通过SQL2005登录,但是发布后跳转出现了问题,以下是我代码:
                  //获取用户名
String name=request.getParameter("admin");
//获取密码
String powd=request.getParameter("mm");
//属性、加载JDBC驱动、连接
Connection con=null;
Statement st=null;
ResultSet re=null;
try {
Class.forName("com.miscrosoft.sqlserver.jdbc.SQLServerDriver");
con=DriverManager.getConnection(
"jdbc:sqlserver://localhost:1433;databaseName=cd","asd","");
st=con.createStatement();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
//SQL语句
String sql="select * from admin where admin='"+name+"' and mm='"+powd+"'";

try {
re=st.executeQuery(sql);
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

try {
if(re.next()){// 有匹配的用户名和密码,登陆成功
                response.sendRedirect("htgl.jsp");
}
else{
response.sendRedirect("ht.jsp");
}
} catch (SQLException e) {
e.printStackTrace();
}
下面是出现的错误页面显示:
type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception java.lang.NullPointerException
com.servlet.ht_servlet.doPost(ht_servlet.java:52)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
note The full stack trace of the root cause is available in the Apache Tomcat/6.0.13 logs.这个是第52行re=st.executeQuery(sql);
谢谢大家了……

解决方案 »

  1.   

    这样试试看!String name=request.getParameter("admin"); //获取密码 
    String powd=request.getParameter("mm"); //属性、加载JDBC驱动、连接 
    Connection con=null; 
    Statement st=null; 
    ResultSet re=null; 
    try { 
    Class.forName("com.miscrosoft.sqlserver.jdbc.SQLServerDriver"); 
    con=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=cd","asd",""); 
    st=con.createStatement(); 
    String sql="select * from admin where admin='"+name+"' and mm='"+powd+"'"; 
    re=st.executeQuery(sql);
    if(re.next())// 有匹配的用户名和密码,登陆成功 
    {
                    response.sendRedirect("htgl.jsp"); 

    else{ 
    response.sendRedirect("ht.jsp"); 

    } catch (Exception e) { 
    e.printStackTrace(); 
    }
      

  2.   

    你在re=st.executeQuery(sql); 
    这句以前把你的con和sql打出来看看不就知道了,要多调试!!!
      

  3.   

    Class.forName("com.miscrosoft.sqlserver.jdbc.SQLServerDriver"); 
    中的miscrosoft错了,应该是:microsoft
      

  4.   

    还有,既然是登录你的SQL语句就不能是拼接的,必须是用参数!!
      

  5.   

    Class.forName("com.miscrosoft.sqlserver.jdbc.SQLServerDriver"); 
    中的miscrosoft错了,应该是:microsoft
    还有你没有给用户 Sql 数据库的(*密码*)
    还有给 你说,少用Statement,应该多用PreparedStatement对象执行sql语句,这样的效率更高些。
      

  6.   

    就这个异常,是空指针错误
    少个初始化
    st=con.createStatement(); 
      

  7.   

    Class.forName("com.miscrosoft.sqlserver.jdbc.SQLServerDriver"); 
    红色部分单词写错了
    应该是microsoft 
      

  8.   

    st为空
    try { 
    Class.forName("com.miscrosoft.sqlserver.jdbc.SQLServerDriver"); 
    con=DriverManager.getConnection( 
    "jdbc:sqlserver://localhost:1433;databaseName=cd","asd",""); 
    st=con.createStatement(); 
    } 你在try内判断一下st是否为空,在try外再判断一下试试
      

  9.   

    顶3楼,我建议你把操作数据库这个过程放到一个try块里,这样出一个异常后面的都不执行了,像LZ写的那种方式,第一个块出异常以后的都报错,而且代码很长,很不爽顶15楼,的确,楼主太粗心,驱动路径写错了
      

  10.   

    java.lang.NullPointerException 
    com.servlet.ht_servlet.doPost(ht_servlet.java:52) 
      

  11.   

    Class.forName("com.miscrosoft.sqlserver.jdbc.SQLServerDriver"); 
    中的miscrosoft错了,应该是:microsoft
      

  12.   

    我做.net的登录时也出了n多错,如果是初学者可以参考一下实例,很有用的
      

  13.   

    登陆验证不可以用连接SQL字符串,会有SQL注入漏洞,用传参数的方法吧
      

  14.   

    com.miscrosoft.sqlserver.jdbc.SQLServerDriver
      

  15.   

    String sql="select * from admin where admin='"+name+"' and mm='"+powd+"'"; JSP中不支持*,想搜索的话只能把*改成字段名。
      

  16.   

    st为空 
    try { 
    Class.forName("com.miscrosoft.sqlserver.jdbc.SQLServerDriver"); 
    con=DriverManager.getConnection( 
    "jdbc:sqlserver://localhost:1433;databaseName=cd","asd",""); 
    st=con.createStatement(); 
    } 你在try内判断一下st是否为空,在try外再判断一下试试
      

  17.   

    String sql="select * from admin where admin='"+name+"' and mm='"+powd+"'";try {
    re=st.executeQuery(sql);
    System.out.println(re); //打印看看有没有
    } catch (SQLException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
    } Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 怕错误就复制别人的试试,自己照着敲几遍就似了。
      

  18.   


    String name = request.getParameter("username");
    String pwd = request.getParameter("password");
    //out.println(name+pwd);
    String sql ="select * from Info where username='"+name+"' and password='"+pwd+"'";
    //out.println(sql);
    Statement stm= null;
    ResultSet rs =null;
    try
    {
    stm = conn.createStatement();
    rs = stm.executeQuery(sql);
    if(rs.next())
    {
    session.setAttribute("username",name);
    response.sendRedirect("index.html");
    }
    else
    {
    response.sendRedirect("index1.html");
    }
    }
    catch(SQLException e)
    {
    e.printStackTrace();
    }
    我写的~能登录!
    加载数据库驱动就没写出来了~你自己看看哪里错了嘛~
    com.miscrosoft.sqlserver.jdbc.SQLServerDriver错了!
    con.microsoft.sqlserver.jdbc.SQLServerDriver
      

  19.   

    楼主的写法很诡异啊 哈哈! 你这样拼SQL  如果长了 很容易错 建议用PREP
      

  20.   

    学了一年的Java,还是不咋的啊。学习啦
      

  21.   

    st这个对象实例为空,说明SQL语句有问题。
      

  22.   

    我今天也遇到了SQL问题  不过解决了
      

  23.   

    还有用Statement?不怕注入?安全 性能 ??
      

  24.   

    Class.forName("com.miscrosoft.sqlserver.jdbc.SQLServerDriver"); 
    中的miscrosoft错了,应该是:microsoft
      

  25.   

    加入JAVA技术群 17567462 一起讨论
      

  26.   

    你这样会有SQL注入的问题,正确密码后面加几个空格还是可以进去的。
      

  27.   

    写TRY-CATCH是个好习惯,但是也用不着,一句代码就用个TRY-CATCH呀!!
      

  28.   

    就一个Microsoft的错误,真实郁闷了,楼主真是个神啊,我发现别人一修改这个问题就出来了,呵呵,下次注意,细心些,调试跟动手是必须的