<%
boolean flag = false;
sql = "select name from person where id=? and password=?"; //加载驱动程序
try
{
Class.forName(DBDRIVER);
//连接数据库
conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);
//操作数据库 通过Connection对象实例化PreparedStatement对象
pstmt = conn.prepareStatement(sql);
pstmt.setString(1,id);//此处的1代表什么?
pstmt.setString(2,password);
rs = pstmt.executeQuery();
if(rs.next())
{
flag = true;
session.setAttribute("uname",rs.getString(1));//此处的1有代表什么,与上面的难道不是一个东西吗?
}
else
{
request.setAttribute("err","用户名,密码错误!");
}
}
catch(Exception e)
{
e.printStackTrace();
}
//关闭数据库
try
{
rs.close();
pstmt.close();
conn.close();
}
catch(Exception e)
{
e.printStackTrace();
}
%>

解决方案 »

  1.   

    第一个1是把后面的id替代sql中的第一个问号,第二个1是取rs中的第一列的值
      

  2.   

    首先,可以先查查jdk的帮助文档。在
    http://java.sun.com/
    里找.pstmt.setString(1,id);//此处的1代表什么? 
     第一个问号 id
    session.setAttribute("uname",rs.getString(1));//此处的1有代表什么,与上面的难道不是一个东西吗?
    resultset的第i行第一列 因为此时sql = "select name from person where id=? and password=?";返回只有一列,自然就是username了。
    如果sql = "select name,pass from person where id=? and password=?";
    那么 rs.getString(2) 取得是pass,也可以这样写rs.getString("pass");
      

  3.   

    代码也能写成这样.................
    假如conn成功了,但rs或pstmt是null,因为如果SQL语法错误,pstmt和rs肯定为null.
                try
                {
                    rs.close();
                    pstmt.close();
                    conn.close();
                }
                catch(Exception e)
                {
                    e.printStackTrace();
                }
    这里,conn.close()肯定得不到执行,不知道这种年的代码是怎么考虑的,竟然能写成这样.
    结果就是大约三3-50最多上百次访问后连接用尽,系统崩溃.真好
      

  4.   

    你不用听axman的,他是国内少有的技术牛人,不过说话比较直,而且很难听。继续努力学就是了。