第五讲
(一)cookie的讲解和使用
(二)cookie和session的比较
(三)网站架构的改进
(四)用户登录系统的改进
什么是cookie
服务器在客户端保存的用户信息,就是cookie
cookie的作用
保存用户名、密码,在一定时间内不重新登录
记录用户访问网站的喜好
网站的个性化
cookie的使用
1.创建cookie
package com.tingwei;
import javax.servlet.http.*;
import java.io.*;
public class CookieTest1 extends HttpServlet {
//处理get请求
public void doGet(HttpServletRequest req,HttpServletResponse res){
try {
res.setContentType("text/html;charset=gbk");
PrintWriter pw=res.getWriter();
//当用户访问该Servlet时,就将信息创建到该用户的cookie天中
//1.先在服务器端创建一个cookie
Cookie mycookie=new Cookie("color1","red");
//2.设置cookie存在的时间
mycookie.setMaxAge(30);//单位秒,从创建开始计时
//如果不设置存在时间,那么该cookie将不会被保存
//3.将该cookie写回客户端
res.addCookie(mycookie);
pw.println("已经创建了cookie");
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
2.读取cookie
//如何读取Cookie
package com.tingwei;
import javax.servlet.http.*;
import java.io.*;
public class CookieTest2 extends HttpServlet {
//处理get请求
public void doGet(HttpServletRequest req,HttpServletResponse res){
try {
res.setContentType("text/html;charset=gbk");
PrintWriter pw=res.getWriter();
//从客户端得到所有cookie信息
Cookie [] allCookies=req.getCookies();
int i=0;
//如果allCookies不为空
if(allCookies!=null){
//从中取出cookie
for(i=0;i<allCookies.length;i++){
//依次取出
Cookie tmp=allCookies[i];
if(tmp.getName().equals("color1")){
//得到cookie信息
String val=tmp.getValue();
pw.println("color1="+val);
break;
}//if
}//for
if(allCookies.length==i){
pw.println("cookie 过期");
}
}else{
pw.println("不存在color1这个cookie/cookie 过期");
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
3.删除cookie
//如何读取Cookie
package com.tingwei;
import javax.servlet.http.*;
import java.io.*;
public class CookieTest3 extends HttpServlet {
//处理get请求
public void doGet(HttpServletRequest req,HttpServletResponse res){
try {
res.setContentType("text/html;charset=gbk");
PrintWriter pw=res.getWriter();
//从客户端得到所有cookie信息
Cookie [] allCookies=req.getCookies();
int i=0;
//如果allCookies不为空
if(allCookies!=null){
//从中取出cookie
for(i=0;i<allCookies.length;i++){
//依次取出
Cookie tmp=allCookies[i];
if(tmp.getName().equals("color1")){
//将该cookie删除
tmp.setMaxAge(0);
pw.println("删除了color1这个cookie");
break;
}
}
if(allCookies.length==i){
pw.println("不存在color1这个cookie/cookie 过期");
}
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
使用cookie完成保存用户名密码,在一段时间内不用重新登录
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- -->
<web-app>
<display-name>Welcome to Tomcat</display-name>
<description>
Welcome to Tomcat
</description>
<!--每写一个servlet都要部署-->
<servlet>
<!--给你的servlet取名-->
<servlet-name>login</servlet-name>
<!--指明servlet的路径,包名+类名-->
<servlet-class>com.tingwei.Login</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>login</servlet-name>
<!--在浏览器中输入的访问该servlet的url,任意的-->
<url-pattern>/login</url-pattern>
</servlet-mapping>
<!--每写一个servlet都要部署-->
<servlet>
<!--给你的servlet取名-->
<servlet-name>wel</servlet-name>
<!--指明servlet的路径,包名+类名-->
<servlet-class>com.tingwei.Wel</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>wel</servlet-name>
<!--在浏览器中输入的访问该servlet的url,任意的-->
<url-pattern>/wel</url-pattern>
</servlet-mapping>
<!--每写一个servlet都要部署-->
<servlet>
<!--给你的servlet取名-->
<servlet-name>logincl</servlet-name>
<!--指明servlet的路径,包名+类名-->
<servlet-class>com.tingwei.LoginCl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>logincl</servlet-name>
<!--在浏览器中输入的访问该servlet的url,任意的-->
<url-pattern>/logincl</url-pattern>
</servlet-mapping>
<!--每写一个servlet都要部署-->
<servlet>
<!--给你的servlet取名-->
<servlet-name>cookietest1</servlet-name>
<!--指明servlet的路径,包名+类名-->
<servlet-class>com.tingwei.CookieTest1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>cookietest1</servlet-name>
<!--在浏览器中输入的访问该servlet的url,任意的-->
<url-pattern>/cookietest1</url-pattern>
</servlet-mapping>
<!--每写一个servlet都要部署-->
<servlet>
<!--给你的servlet取名-->
<servlet-name>cookietest2</servlet-name>
<!--指明servlet的路径,包名+类名-->
<servlet-class>com.tingwei.CookieTest2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>cookietest2</servlet-name>
<!--在浏览器中输入的访问该servlet的url,任意的-->
<url-pattern>/cookietest2</url-pattern>
</servlet-mapping>
</web-app>
//登录界面
package com.tingwei;
import javax.servlet.http.*;
import java.io.*;
public class Login extends HttpServlet{
public void doGet(HttpServletRequest req,HttpServletResponse res)
{
try {
//中文乱码处理
res.setContentType("text/html;charset=gbk");
PrintWriter pw=res.getWriter();
//返回登录界面
pw.println("<html>");
pw.println("<body>");
pw.println("<img src=imgs/image2.jpg width=200><br>");
pw.println("<h>登录界面</h>");
pw.println("<form action=logincl method=post>");
pw.println("用户名:<input type=text name=username><br>");
pw.println("密码:<input type=password name=passwd><br>");
pw.println("<input type=checkbox name=keep value=2>两周内不在重新登录<br>");
pw.println("<input type=submit value=login><br>");
pw.println("</form>");
pw.println("</body>");
pw.println("</html>");
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
public void doPost(HttpServletRequest req,HttpServletResponse res)
{
this.doGet(req, res);
}
}
//用户验证Servlet
package com.tingwei;
import javax.servlet.http.*;
import java.io.*;
import java.sql.*;
public class LoginCl extends HttpServlet{
public void doGet(HttpServletRequest req,HttpServletResponse res)
{
Connection ct=null;
Statement sm=null;
ResultSet rs=null;
String url="jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=spdb";
String user="sa";
String passwd="tingwei";
String driver="com.microsoft.jdbc.sqlserver.SQLServerDriver";
//业务逻辑
try {
//接收用户名和密码
String u=req.getParameter("username");
String p=req.getParameter("passwd");
//连接接数据库,三部曲
Class.forName(driver);
//得到连接
ct=DriverManager.getConnection(url,user,passwd);
//创建一个Statement
sm=ct.createStatement();
String query="select top 1 *from users where usernaem='"+u+"' and passwd='"+p+"'";
rs=sm.executeQuery(query);
//验证
if(rs.next()){
//合法用户
String keep=req.getParameter("keep");
//将用户名和密码保存在客户端cookie
if(keep!=null){
Cookie name=new Cookie("myname",u);
Cookie pass=new Cookie("mypasswd",p);
//设置时间
name.setMaxAge(14*24*3600);
pass.setMaxAge(14*24*3600);
//回写到客户端
res.addCookie(name);
res.addCookie(pass);
}
//将验证成功的信息写入session
HttpSession hs=req.getSession(true);
//修改session的存在时间 单位s
hs.setMaxInactiveInterval(30);
hs.setAttribute("uname", u);
res.sendRedirect("wel");
}else{
//不合法,跳转到Login
res.sendRedirect("login");
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
try {
if(rs!=null) rs.close();
if(sm!=null) sm.close();
if(ct!=null) ct.close();
} catch (Exception e2) {
// TODO: handle exception
e2.printStackTrace();
}
}
}
public void doPost(HttpServletRequest req,HttpServletResponse res)
{
this.doGet(req, res);
}
}
//欢迎界面
package com.tingwei;
import javax.servlet.http.*;
import java.io.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
public class Wel extends HttpServlet{
public void doGet(HttpServletRequest req,HttpServletResponse res)
{
//得到session
HttpSession hs=req.getSession();
String myName=(String)hs.getAttribute("uname");
String name="";
String password="";
PrintWriter pw=null;
Connection ct=null;
PreparedStatement ps=null;
ResultSet rs=null;
String url="jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=spdb";
String user="sa";
String passwd="tingwei";
String driver="com.microsoft.jdbc.sqlserver.SQLServerDriver";
try {
//判断
if(myName==null){
//如果session中没有用户信息,再看看cookie中有没有
Cookie [] allCookies=req.getCookies();
int i=0;
//如果allCookies不为空
if(allCookies!=null){
//从中取出cookie
for(i=0;i<allCookies.length;i++){
//依次取出
Cookie tmp=allCookies[i];
if(tmp.getName().equals("myname")){
//得到cookie信息
name=tmp.getValue();
}else if(tmp.getName().equals("pass")){
password=tmp.getValue();
}
}//for
if(!name.equals("")&&!password.equals("")){
res.sendRedirect("logincl?username="+name+"&passwd="+password);
}
}//if cookie
//返回登录界面
res.sendRedirect("login?info=error1");
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
//===分页的功能===
int pageSize=3;
int pageNow=1;//希望显示第几条记录
int rowCount=0;//共有几条记录(查表)
int pageCount=0;//共有几页(计算出来)
//动态的接收pageNow
String sPageNow=req.getParameter("pageNowOk");
if(sPageNow!=null){
//用户首次进入wel页面
pageNow=Integer.parseInt(sPageNow);
}
//得到从logincl传递的用户名
String u=req.getParameter("uname");
//得到从logincl传递的密码
String p=req.getParameter("upass");
try {
//中文乱码处理
res.setContentType("text/html;charset=gbk");
pw=res.getWriter();
pw.println("<body><center>");
pw.println("<img src=imgs/image2.jpg width=200><br>");
pw.println("welcome,hello "+u+" pass="+p);
pw.println("<br><a href=login>返回重新登录</a>");
//得到rowCount
//连接接数据库,三部曲
Class.forName(driver);
//得到连接
ct=DriverManager.getConnection(url,user,passwd);
//创建一个prepareStatement
ps=ct.prepareStatement("select count(*) from users");
rs=ps.executeQuery(); //执行得到结果
if(rs.next())
{
rowCount=rs.getInt(1);
}
//计算pageCount
if(rowCount%pageSize==0){
pageCount=rowCount/pageSize;
}else{
pageCount=rowCount/pageSize+1;
}
ps=ct.prepareStatement("select top "+pageSize+" * from users where userId not in(select top "+pageSize*(pageNow-1)+" userId from users)");
//给?赋值
rs=ps.executeQuery();
pw.println("<table border=1");
pw.println("<tr><th>id</th><th>name</th><th>passwd</th><th>email</th><th>grade</th></tr>");
while(rs.next()){
pw.println("<tr>");
pw.println("<td>"+rs.getInt(1)+"</td>");
pw.println("<td>"+rs.getString(2)+"</td>");
pw.println("<td>"+rs.getString(3)+"</td>");
pw.println("<td>"+rs.getString(4)+"</td>");
pw.println("<td>"+rs.getString(5)+"</td>");
pw.println("</tr>");
}
pw.println("</table>");
if(pageNow!=1)
//上一页
pw.println("<a href=wel?pageNowOk="+(pageNow-1)+">上一页</a>");
//显示超链接
for(int i=pageNow;i<=pageNow+4;i++){
pw.println("<a href=wel?pageNowOk="+i+">"+i+"</a>");
}
//下一页
if(pageNow!=pageCount)
pw.println("<a href=wel?pageNowOk="+(pageNow+1)+">下一页</a>");
pw.println("</center></body>");
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
public void doPost(HttpServletRequest req,HttpServletResponse res)
{
this.doGet(req, res);
}
}
cookie和session的比较
1.cookie存在客户端,session存在服务器端
2.cookie安全性低,seesion服务器端内存很难查到
3.cookie通过网络在客户端与服务器端传输,而session保存在服务器端不需要传输
4.cookie的生命周期从创建开始,session的生命周期是无操作开始计时,关机session生命周期结束,cookie没有影响。
网站框架的改进
留心的同学会发现,我们将界面和业务逻辑放在一起了,这是编程的忌讳,因为两者的改动相互影响。
1.LoginCl.java和Wel.java都去操作了数据库,出现重复代码
2.整个框架没有清晰的层次结构
3.代码看起来很乱,可读性差,维护难。
改进办法是,将view和logical分层;将重复代码封装到类中
为什么在UserBeanCl中,对于分页显示方法返回的是ArrayList集合,而不是直接返回ResultSet?
1.如果返回ResultSet,那么我们在使用ResultSet时,是不能关闭该ResultSet相互关联的数据库连接等资源,从而造成资源浪费。
2.如果返回ResultSet,我们只能使用rs.getInt(?)这样的方法来得到结果,代码可读性不好,维护不方便
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- -->
<web-app>
<display-name>Welcome to Tomcat</display-name>
<description>
Welcome to Tomcat
</description>
<!--每写一个servlet都要部署-->
<servlet>
<!--给你的servlet取名-->
<servlet-name>login</servlet-name>
<!--指明servlet的路径,包名+类名-->
<servlet-class>com.tingwei.Login</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>login</servlet-name>
<!--在浏览器中输入的访问该servlet的url,任意的-->
<url-pattern>/login</url-pattern>
</servlet-mapping>
<!--每写一个servlet都要部署-->
<servlet>
<!--给你的servlet取名-->
<servlet-name>wel</servlet-name>
<!--指明servlet的路径,包名+类名-->
<servlet-class>com.tingwei.Wel</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>wel</servlet-name>
<!--在浏览器中输入的访问该servlet的url,任意的-->
<url-pattern>/wel</url-pattern>
</servlet-mapping>
<!--每写一个servlet都要部署-->
<servlet>
<!--给你的servlet取名-->
<servlet-name>logincl</servlet-name>
<!--指明servlet的路径,包名+类名-->
<servlet-class>com.tingwei.LoginCl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>logincl</servlet-name>
<!--在浏览器中输入的访问该servlet的url,任意的-->
<url-pattern>/logincl</url-pattern>
</servlet-mapping>
<!--每写一个servlet都要部署-->
<servlet>
<!--给你的servlet取名-->
<servlet-name>cookietest1</servlet-name>
<!--指明servlet的路径,包名+类名-->
<servlet-class>com.tingwei.CookieTest1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>cookietest1</servlet-name>
<!--在浏览器中输入的访问该servlet的url,任意的-->
<url-pattern>/cookietest1</url-pattern>
</servlet-mapping>
<!--每写一个servlet都要部署-->
<servlet>
<!--给你的servlet取名-->
<servlet-name>cookietest2</servlet-name>
<!--指明servlet的路径,包名+类名-->
<servlet-class>com.tingwei.CookieTest2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>cookietest2</servlet-name>
<!--在浏览器中输入的访问该servlet的url,任意的-->
<url-pattern>/cookietest2</url-pattern>
</servlet-mapping>
</web-app>
package com.tingwei;
import javax.servlet.http.*;
import java.io.*;
public class Login extends HttpServlet{
public void doGet(HttpServletRequest req,HttpServletResponse res)
{
try {
//中文乱码处理
res.setContentType("text/html;charset=gbk");
PrintWriter pw=res.getWriter();
//返回登录界面
pw.println("<html>");
pw.println("<body>");
pw.println("<img src=imgs/image2.jpg width=200><br>");
pw.println("<h>登录界面</h>");
pw.println("<form action=logincl method=post>");
pw.println("用户名:<input type=text name=username><br>");
pw.println("密码:<input type=password name=passwd><br>");
pw.println("<input type=checkbox name=keep value=2>两周内不在重新登录<br>");
pw.println("<input type=submit value=login><br>");
pw.println("</form>");
pw.println("</body>");
pw.println("</html>");
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
public void doPost(HttpServletRequest req,HttpServletResponse res)
{
this.doGet(req, res);
}
}
//用户验证Servlet
package com.tingwei;
import javax.servlet.http.*;
import java.io.*;
import java.sql.*;
public class LoginCl extends HttpServlet{
public void doGet(HttpServletRequest req,HttpServletResponse res)
{
//业务逻辑
try {
//接收用户名和密码
String u=req.getParameter("username");
String p=req.getParameter("passwd");
//调用UserBeanCl,1.创建对象,2.使用方法
UserBeanCl ubc=new UserBeanCl();
//验证
if(ubc.checkUser(u, p)){
//合法用户
String keep=req.getParameter("keep");
//将用户名和密码保存在客户端cookie
if(keep!=null){
Cookie name=new Cookie("myname",u);
Cookie pass=new Cookie("mypasswd",p);
//设置时间
name.setMaxAge(14*24*3600);
pass.setMaxAge(14*24*3600);
//回写到客户端
res.addCookie(name);
res.addCookie(pass);
}
//将验证成功的信息写入session
HttpSession hs=req.getSession(true);
//修改session的存在时间 单位s
hs.setMaxInactiveInterval(30);
hs.setAttribute("uname", u);
res.sendRedirect("wel");
}else{
//不合法,跳转到Login
res.sendRedirect("login");
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
public void doPost(HttpServletRequest req,HttpServletResponse res)
{
this.doGet(req, res);
}
}
package com.tingwei;
import javax.servlet.http.*;
import java.io.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
public class Wel extends HttpServlet{
public void doGet(HttpServletRequest req,HttpServletResponse res)
{
//得到session
HttpSession hs=req.getSession();
String myName=(String)hs.getAttribute("uname");
String name="";
String password="";
PrintWriter pw=null;
Connection ct=null;
PreparedStatement ps=null;
ResultSet rs=null;
String url="jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=spdb";
String user="sa";
String passwd="tingwei";
String driver="com.microsoft.jdbc.sqlserver.SQLServerDriver";
try {
//判断
if(myName==null){
//如果session中没有用户信息,再看看cookie中有没有
Cookie [] allCookies=req.getCookies();
int i=0;
//如果allCookies不为空
if(allCookies!=null){
//从中取出cookie
for(i=0;i<allCookies.length;i++){
//依次取出
Cookie tmp=allCookies[i];
if(tmp.getName().equals("myname")){
//得到cookie信息
name=tmp.getValue();
}else if(tmp.getName().equals("pass")){
password=tmp.getValue();
}
}//for
if(!name.equals("")&&!password.equals("")){
res.sendRedirect("logincl?username="+name+"&passwd="+password);
}
}//if cookie
//返回登录界面
res.sendRedirect("login?info=error1");
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
//===分页的功能===
int pageSize=3;
int pageNow=1;//希望显示第几条记录
//动态的接收pageNow
String sPageNow=req.getParameter("pageNowOk");
if(sPageNow!=null){
//用户首次进入wel页面
pageNow=Integer.parseInt(sPageNow);
}
//调用UserBeanCl
UserBeanCl ubc=new UserBeanCl();
ArrayList al=ubc.getResultByPage(pageNow, pageSize);
//得到从logincl传递的用户名
String u=req.getParameter("uname");
//得到从logincl传递的密码
String p=req.getParameter("upass");
try {
//中文乱码处理
res.setContentType("text/html;charset=gbk");
pw=res.getWriter();
pw.println("<body><center>");
pw.println("<img src=imgs/image2.jpg width=200><br>");
pw.println("welcome,hello "+u+" pass="+p);
pw.println("<br><a href=login>返回重新登录</a>");
pw.println("<table border=1");
pw.println("<tr><th>id</th><th>name</th><th>passwd</th><th>email</th><th>grade</th></tr>");
for(int i=0;i<al.size();i++){
UserBean ub=(UserBean)al.get(i);
pw.println("<tr>");
pw.println("<td>"+ub.getUserId()+"</td>");
pw.println("<td>"+ub.getUserName()+"</td>");
pw.println("<td>"+ub.getPasswd()+"</td>");
pw.println("<td>"+ub.getMial()+"</td>");
pw.println("<td>"+ub.getGrade()+"</td>");
pw.println("</tr>");
}
pw.println("</table>");
if(pageNow!=1)
//上一页
pw.println("<a href=wel?pageNowOk="+(pageNow-1)+">上一页</a>");
//显示超链接
for(int i=pageNow;i<=pageNow+4;i++){
pw.println("<a href=wel?pageNowOk="+i+">"+i+"</a>");
}
int pageCount=ubc.getPageCount();
//下一页
if(pageNow!=pageCount)
pw.println("<a href=wel?pageNowOk="+(pageNow+1)+">下一页</a>");
pw.println("</center></body>");
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
public void doPost(HttpServletRequest req,HttpServletResponse res)
{
this.doGet(req, res);
}
}
//这是一个UserBean,和User表映射
//它的一个对象映射user表的一条记录
//数据
package com.tingwei;
public class UserBean {
private int userId;
private String userName;
private String passwd;
private String mial;
private int grade;
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPasswd() {
return passwd;
}
public void setPasswd(String passwd) {
this.passwd = passwd;
}
public String getMial() {
return mial;
}
public void setMial(String mial) {
this.mial = mial;
}
public int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
}
//从数据库得到连接
package com.tingwei;
import java.sql.*;
public class ConnDB {
private Connection ct=null;
public Connection getConn(){
try {
String url="jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=spdb";
String user="sa";
String passwd="tingwei";
String driver="com.microsoft.jdbc.sqlserver.SQLServerDriver";
//得到rowCount
//连接接数据库,三部曲
Class.forName(driver);
//得到连接
ct=DriverManager.getConnection(url,user,passwd);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return ct;
}
}
//这是一个处理类(处理Users表)<--->操作userBean
//业务逻辑在这
package com.tingwei;
import java.sql.*;
import java.util.ArrayList;
public class UserBeanCl {
//业务逻辑
private Connection ct=null;
private PreparedStatement ps=null;
private ResultSet rs=null;
private int pageCount=0;//共有几页(计算得到)
//验证用户
public boolean checkUser(String u,String p){
boolean b=false;
try {
//得到连接
ConnDB cd=new ConnDB();
ct=cd.getConn();
ps=ct.prepareStatement("select top 1 passwd from users where username=?");
ps.setString(1, u);
rs=ps.executeQuery();
if(rs.next()){
String dbPasswd=rs.getString(1);
if(dbPasswd.equals(p)){
b=true;
}
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{//用完数据库后记得关闭,可以写一个函数来关
this.close();
}
return b;
}
//关闭数据库
public void close(){
try {
if(rs!=null)rs.close();
if(ps!=null)ps.close();
if(ct!=null)ct.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
//分页显示
public ArrayList getResultByPage(int pageNow,int pageSize){
ArrayList al=new ArrayList();
try {
int rowCount=0;//共有几条记录(查表)
int pageCount=0;//共有几页(计算出来)
//得到rowCount
ConnDB cd=new ConnDB();
ct=cd.getConn();
//创建一个prepareStatement
ps=ct.prepareStatement("select count(*) from users");
rs=ps.executeQuery(); //执行得到结果
if(rs.next())
{
rowCount=rs.getInt(1);
}
//计算pageCount
if(rowCount%pageSize==0){
pageCount=rowCount/pageSize;
}else{
pageCount=rowCount/pageSize+1;
}
ps=ct.prepareStatement("select top "+pageSize+" * from users where userId not in(select top "+pageSize*(pageNow-1)+" userId from users)");
//给?赋值
rs=ps.executeQuery();
while(rs.next()){
//将rs中的每一条记录分装到UserBean ub中
UserBean ub=new UserBean();
ub.setUserId(rs.getInt(1));
ub.setUserName(rs.getString(2));
ub.setPasswd(rs.getString(3));
ub.setMial(rs.getString(4));
ub.setGrade(rs.getInt(5));
//将ub放入到ArrayList中
al.add(ub);
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
this.close();
}
return al;
}
public int getPageCount(){
return this.pageCount;
}
}
需要用到的sql语句
alter table users add NewColumn nchar(5) null --新增列
alter table users drop column NewColumn --删除列
alter table users alter column NewColumn nvarchar(10)--修改字段属性
exec sp_rename 'users.usernaem','username'--修改字段名
exec sp_help users--查看指定的表结构
drop table users--删除数据表
exec sp_rename 'users','users2'--修改表名
select top 1 passwd from users where username='admin'--查找符合用户名的一个密码
事实上可以单独写一个类来处理分页,在wel页面中调用DividePage类的方法,就更进一步讲界面与逻辑处理相分离了。