1. 程式人生 > >使用jdbc和servlet實現閱覽文章訪問次數

使用jdbc和servlet實現閱覽文章訪問次數

package com.lm.org;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


/**
 * Servlet implementation class Test
 */
public class Test extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     */
    public Test() {
        super();
    }

	/**
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		this.doPost(request, response);
		
	}

	/**
	 */
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		PrintWriter out = response.getWriter();
		
		//HttpSession session = request.getSession();// 得到session
		//ServletContext application = super.getServletContext();
		//Integer accessCount = (Integer) application.getAttribute("accessCount");//資料庫查詢出來
		
		Integer wiewsCount=null;
		Connection connection = null;
		String sql="select * from t_news where id=1 ";//wiewsCount
		PreparedStatement ps=null;
		ResultSet rs=null;
		try {
			  connection=getConnection();
			  ps = connection.prepareStatement(sql);
			  rs = ps.executeQuery();
			  if(rs.next()){
				    wiewsCount = rs.getInt("wiewsCount");
				  if(wiewsCount==null){
					  wiewsCount = 1;
				  }else{
					  wiewsCount = wiewsCount + 1;
					  Connection cn =getConnection();
					  String sql1="update t_news set wiewsCount="+wiewsCount+" where id=1";
					  PreparedStatement prepareStatement = cn.prepareStatement(sql1);
					  int executeUpdate = prepareStatement.executeUpdate();
					  if(executeUpdate>0){
						  System.out.println("1");
					  }else{
						  System.out.println(2);
					  }
					  cn.close();
					  cn=null;
					  prepareStatement.close();
					  prepareStatement=null;
				  }
			  }
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			try {
				connection.close();
				connection=null;
				ps.close();
				ps=null;
				rs.close();
				rs=null;
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		
		
		Integer ac;
		try {
			ac = accessCount(request, response);
			out.println("模擬值="+ac+"\t資料庫值="+wiewsCount);
		} catch (Exception e) {
			e.printStackTrace();
		}
	
		out.flush();
		out.close();
	
	}

	
	public static Integer accessCount(HttpServletRequest request,HttpServletResponse response)throws Exception{
		HttpServletRequest hs=(HttpServletRequest)request;
		ServletContext application = hs.getServletContext();
		Integer accessCount = (Integer) application.getAttribute("accessCount");//資料庫查詢出來
		
		//if=null
		if (accessCount == null) {
			accessCount = 1;
			application.setAttribute("accessCount", accessCount);
		} else {
			//else +1並修改資料庫的值
			accessCount = accessCount + 1;
			application.setAttribute("accessCount", accessCount);
			//update
		}
		return accessCount;
		
	}
	
	/**
	 * @return
	 */
	public static Connection getConnection() {
		Connection conn = null;
		try {
			Class.forName(Driver);
			conn = DriverManager.getConnection(Url, UserName, PassWord);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return conn;
	}
	private static String Driver = "com.mysql.jdbc.Driver";// ConfigUtils.getProperty("jdbc.driver");
	private static String Url = "jdbc:mysql://localhost:3306/test?characterEncoding=utf8";// ConfigUtils.getProperty("jdbc.url");
	private static String UserName = "root";// ConfigUtils.getProperty("jdbc.userName");
	private static String PassWord = "root";// ConfigUtils.getProperty("jdbc.passWord");

}