程序源代码如下:
<%!
  String DBDriver="com.mysql.jdbc.Driver";
  String url="jdbc:mysql://localhost:3306/test?user=root&password=root";
  Connection conn=null;
  PreparedStatement pstmt=null;
  ResultSet rs =null;
%>
<%
String id = request.getParameter("id") ;
        String password = request.getParameter("password") ;
        这两个参数的值已经从前一页面传递过来。测试已通过
%>
<%
String sql = "SELECT name FROM person WHERE id=? and password=?" ;

try
{
 Class.forName(DBDriver);
         conn=DriverManager.getConnection(url);
 pstmt = conn.prepareStatement(sql) ;
 pstmt.setString(1,id) ;
 pstmt.setString(2,password) ;
 rs = pstmt.executeQuery() ;
                 System.out.println(rs.getString(1));   //(1)该处不知为什么取不出值,注意该处的值是数据库中确实存在的,可是控制台却什么也不显示,好像是空           
%>
(1)处若换为System.out.println(rs.getString(“test”));能够输出值:test
 (1) 处若换为System.out.println(rs.next());能够输出:false

解决方案 »

  1.   

    (1)处换成while (rs.next()){
      System.out.println(rs.getString(1));
    }试试,但是你下面说的打印rs.next()是false,是不是就没值啊
      

  2.   

    前一页面传过来的值为:admin 123 
    数据库中确实的值为:admin 123
    可就是取不出来很是想不通
      

  3.   

    没报什么错误吗
    String sql = "SELECT name FROM person WHERE id=? and password=?" ; 
    你执行这条sql语句,获取的ResultSet只有一列建议使用列名来获取数据
      

  4.   

    因为第一次的游标是在第一个值的上面,你先用rs.next()把游标指向第一个值下面啊,
    这个肯定行的,如果下一个没有值的话就输出空的,循环和行一下也行...
      

  5.   

    你必须使用rs.next()使游标移动才能取到值的
      

  6.   

       _A_B_C_D
       |       游标的位置开始是指向A前面的,等你next()后游标才移动到A的下面,这样才有值。
      

  7.   

    补充说明:我按大家说的方法确实提取到了数据,可还是有个现象不明白,代码如下:
                  ......
                  rs = pstmt.executeQuery() ;
        System.out.println(rs.next());(1)
        if(rs.next()){
        System.out.println(rs.getString(1));}
    程序输出结果如下:
    admin
    123
    false
    按大家所说,假如不rs.next(),是取不到值的,既然(1)处为false了,怎么还能进入if,进入if后怎么会输出两个字段的值,最后还输出了false.希望哪个高手给讲讲。
    我所理解的程序输出结果应该是:
    false
    admin
    不知道哪个地方理解的不对
      

  8.   

    我根本没有用Eclipe 发布。我是通过Tomcat指向虚拟目录实现的,而且还发现一个问题: 
        System.out.println(rs.next());(1) 
        if(rs.next()){ 
        System.out.println(rs.getString(1)); 
        System.out.println(“test”); 

    我输出的结果仍然是: 
    admin 
    123 
    false 
    test 也没输出,我重启Tomcat,重新登录界面,还是这个问题,从来没遇到过。我想还是程序的思路不对吧,还是rs.next()有问题
      

  9.   

    <%!
              String DBDriver="org.git.mm.mysql.Driver";
      String url="jdbc:mysql://localhost:3306/test?user=root&password=root";
      Connection conn=null;
      PreparedStatement pstmt=null;
      ResultSet rs =null;
    %>
    <% // 接收参数
    String id = request.getParameter("id") ;
    String password = request.getParameter("password") ;

    %>
    <%
    String sql = "SELECT * FROM person WHERE id=? and password=?" ;

    try
    {
      Class.forName(DBDriver).newInstance();
              conn=DriverManager.getConnection(url);
      pstmt = conn.prepareStatement(sql) ;
      pstmt.setString(1,id) ;
      pstmt.setString(2,password) ;
      rs = pstmt.executeQuery() ;
               
    if(rs.next())
    {
       System.out.println(rs.getString(1)); 
     
                 session.setAttribute("uname",rs.getString(1)) ;
    }
    else
    {
    // 保存错误信息
    request.setAttribute("err","错误的用户名及密码!!!") ;
    }
    rs.close() ;
    pstmt.close() ;
    conn.close() ;
    }
    catch(Exception e)
    {}
    %>
    刚刚重新调整了程序,发现错误的根本原因还是rs.next()一直为false,程序更本没有运行到if里,看来还是数据库连接中出了错。可就是不知到错在哪
      

  10.   

    谢谢各位指点,我已找出错误原因,现说明原因:
      1.我的程序一直就没执行到if(){}里面至于为什么会输出:admin 123 是因为我在做测试时曾用    system.out.println(name); system.out.println(password);测试,所以控制台输出的是从前一页面接收到的值,而不是数据库中的值,所以在输出数据后仍然会打印false
      2.最主要的错误还是这里:
        String DBDriver="com.mysql.jdbc.Driver"; 
        String DBDriver="org.git.mm.mysql.Driver";
    这是在做最后检查时,怀疑出的问题,果然是这里,我不知道这两个驱动到底有什么区别,总之String DBDriver="org.git.mm.mysql.Driver";就不能进行连接数据库,希望哪位朋友知道两个的区别和使用条件,请继续跟贴,详细说说!
      

  11.   

    你写的JDBC的URL是对应这个驱动的吧 com.mysql.jdbc.Driver 可能那个驱动的URL不是这样写,反正我一直都是用JDBC的驱动。