各位朋友大家好·!
下面是:beanr的程序:
condb.java
package com.wlg.test;
import java.sql.*;
public class condb //构选函数必须同包名一致
{
        String sd="sun.jdbc.odbc.JdbcOdbcDriver";
        String sc="jdbc:odbc:prodb";
        Connection con=null;
        ResultSet rs=null;
        public condb(){
                try
                {
                        Class.forName(sd);
                }
                catch(java.lang.ClassNotFoundException e)
                {
                        System.err.println(e.getMessage());
                }
        }
        public ResultSet executeQuery(String sql)
        {
                try
                {
                        con=DriverManager.getConnection(sc);
                        Statement stmt=con.createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,java.sql.ResultSet.CONCUR_READ_ONLY);
                        rs=stmt.executeQuery(sql);                }
                catch(SQLException ex)
                {
                        System.err.println(ex.getMessage());
                }
                return rs;
        }
}下在是servlet程序:
Hello.java
package com.wlg.servlet;
import com.wlg.test.condb;
import java.io.*; 
import javax.servlet.*; 
import javax.servlet.http.*; 
import javax.servlet.jsp.*;
import java.sql.*;
public class Hello extends HttpServlet{
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException
{
String username;  //客户姓名
String password;  //密码
String actionname; //是提交了!
//设置用中文GB2312编码处理页面参数的中文信息
request.setCharacterEncoding("GB2312");
//读取POST请求的数据
username=request.getParameter("username");
password=request.getParameter("password");
actionname=request.getParameter("actionname");
                HttpSession httpSession = request.getSession(true);
                httpSession.setAttribute("username1", username);
                condb dndb = new condb();
                String sql = "select * from T_User_db where username='" + username +"'";
                ResultSet rset = dndb.executeQuery(sql);
                //try {
    
                    if (rset.next()) {
                        String email = rset.getString("email");
                        String userpass1 = rset.getString("userpass");
    
                        //创建名字为“usr”、“password”两个Session变量
                        httpSession.setAttribute("email", email);
                        httpSession.setAttribute("password", "userpass1");
                    } else {
                        response.sendRedirect("../../login.jsp");
                    }
                //} catch (SQLException e) {
               //     System.err.println(e.getMessage());
               // }
response.setContentType("text/html;charset=GB2312");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<body>");
out.println("<head>");
out.println("<title>用户登陆情况</title>");
out.println("</head>");
out.println("<body>");
                out.println("sql:"+sql+"</br>"+rset+"<br>");
out.println("用户名:"+username+"");
out.println("<br>密码:"+password+"</br>");
out.println("<br>提交方式:"+actionname+"</br>");
                out.println("<a href=../../listsession.jsp>查看session变量</a>");
out.println("</body>");
out.println("</html>");
}
}上面的程序在通过jbuilder2006编译的时候:出错了:
出错内容为:
"Hello.java": unreported exception java.sql.SQLException; must be caught or declared to be thrown at line 28, column 34
"Hello.java": unreported exception java.sql.SQLException; must be caught or declared to be thrown at line 29, column 54
"Hello.java": unreported exception java.sql.SQLException; must be caught or declared to be thrown at line 30, column 58
基本的意思就是没有捕获异常,但是我使用了:try{}catch{}之后,编译通了。但没有得session值。session的值就为空了。login.jsp登陆页为:
<form name="form1" action="/javabean/servlet/com/checklogin.do?actionname=editsava"  method="post" onsubmit="return xxg()">
                   <input name="username" type="text" class="my_input" id="sa" size="12">
                   <input name="password" type="password" class="my_input" id="pwd" size="12">
                   <input name="imageField" type="image" src="images/gl_13.gif" width="64" height="20" border="0">
</form>使用上面之后。我在listsession.jsp页里面把session的值读出来:
读session值页面:listsession.jsp
    <%
out.println("<br><br>用户名1:");
out.println(session.getAttribute("username1"));
out.println("<br><br>email:");
out.println(session.getAttribute("email"));
out.println("<br><br>密 码:");
out.println(session.getAttribute("password"));
%>如果我输入的是hcg,并在数据库找到,那就应该是:
用户名1: hcg 
email: [email protected]
密 码: 1231231可是结果是这样:
用户名1: hcg 
email: null 
密 码: null 在try{}之中使用的:
   httpSession.setAttribute("email", email);
   httpSession.setAttribute("password", "userpass1");
根本就没有值!而为空,请问一下是什么原因!如果不使用try{}
编译通过不了。使用了,session值为空,请问一下,是什么原因啊。但是我这可以肯定一点。数据库连接是正常的。只是在读取数据库的值的时候,出异常了。
使用try{}之后编译,如果我输入的用户名在数据库中找不到。它就自动的弹会登陆页面。
证连接数据库正常,
只是在:                    if (rset.next()) {
                        String email = rset.getString("email");
                        String userpass1 = rset.getString("userpass");
上面三行出错了。请详细解答一下。谢谢!

解决方案 »

  1.   

    String email = rset.getString("email");
    String userpass1 = rset.getString("userpass");System.out.println("email="+email+"   userpass1="+userpass1) ;看看取到数据没有既然之前session中设置的用户名都可以正常显示,应该不是session的问题
      

  2.   

    用户名1: hcg 
    之所以显示正常,是因为:
    httpSession.setAttribute("username1", username);
    没有放在try{}catch{}之间。
    放在之间了,就会显示:null,
      

  3.   

    那你的doPost声明抛出异常public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException, SQLException不要try catch了
      

  4.   

    package com.wlg.servlet;
    import com.wlg.test.condb;
    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    import javax.servlet.jsp.*;
    import java.sql.*;
    public class Hello extends HttpServlet{
    public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException
    {
    String username;  //客户姓名
    String password;  //密码
    String actionname; //是提交了!
    //设置用中文GB2312编码处理页面参数的中文信息
    request.setCharacterEncoding("GB2312");
    //读取POST请求的数据
    username=request.getParameter("username");
    password=request.getParameter("password");
    actionname=request.getParameter("actionname");
                    HttpSession httpSession = request.getSession(true);
                    httpSession.setAttribute("username1", username);
                    condb dndb = new condb();
                    String sql = "select * from T_User_db where username='" + username +"' order by id desc";
                    ResultSet rset = dndb.executeQuery(sql);
                    
                    response.setContentType("text/html;charset=GB2312");
                    PrintWriter out = response.getWriter();
                    out.println("<html>");
                    out.println("<body>");
                    out.println("<head>");
                    out.println("<title>用户登陆情况</title>");
                    out.println("</head>");
    out.println("<body>");
                    try {
                        if (rset.next()) {
                            String email = rset.getString("email").trim();
                            String userpass1 = rset.getString("userpass").trim();
                            //创建名字为“usr”、“password”两个Session变量
                            out.println("email:"+email+"");
                            httpSession.setAttribute("email", email);
                            httpSession.setAttribute("password", userpass1);
                      } else {
                            response.sendRedirect("../../login.jsp");}
                             } catch (SQLException e) {
                             System.err.println(e.getMessage());
                            }
                    out.println("sql:"+sql+"</br>"+rset+"<br>");
    //out.println("用户名:"+username+"");
    //out.println("<br>密码:"+password+"</br>");
    //out.println("<br>提交方式:"+actionname+"</br>");
                    out.println("<a href=../../listsession.jsp>查看session变量</a>");
    out.println("</body>");
    out.println("</html>");
    }
    }采用上面之后,而在try{}catch{}之间的try {
                        if (rset.next()) {
                            String email = rset.getString("email").trim();
                            String userpass1 = rset.getString("userpass").trim();
                            //创建名字为“usr”、“password”两个Session变量
                            out.println("email:"+email+"");
                            httpSession.setAttribute("email", email);
                            httpSession.setAttribute("password", userpass1);
                      } else {
                            response.sendRedirect("../../login.jsp");}
                             } catch (SQLException e) {
                             System.err.println(e.getMessage());
                            }
    之间的email根本就不显示出来。并且正常编译了。
    如果不使用try{}catch{}就编译不了!
      

  5.   

    你看到这一行输出的结果了吗?
     out.println("email:"+email+"");
    这又助于你定位具体的错误在哪一行
      

  6.   

    其实是这样的,你在调用rs.getxxxx时,它用尽了里面的也就是说rs指针为空了,它就自动跳到了异常,你可以用方法把你的数据库里面的列用vector存起来,再用个方法调用包你可以