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