原本的原始碼是沒有myeclipse工程的,資料庫採用sqlserver2000,伺服器採用tomcat.
本人將所有代碼放到myeclipse10裡面,部署到apache-tomcat-6.0.35,資料庫改用sqlserver2008,發現原來的驅動還可以用,也可以用(http://blog.csdn.net/flyuniverse_shell/article/details/7351016)中說明的新的驅動。
在我本機部署成功的原始碼:
關鍵原始碼:
(DB.java)
package com.yxq.toolbean;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import com.yxq.valuebean.TempSingle;
import com.yxq.valuebean.VoteSingle;
public class DB {
private String className;
private String url;
private String username;
private String password;
private Connection con;
private Statement stm;
private ResultSet rs;
public DB() {
className = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
url = "jdbc:microsoft:sqlserver://localhost:1433;databaseName=db_vote";
username = "sa";
password = "xiexie";
}
/**
* @功能 載入資料庫驅動程式
*/
public void loadDrive() {
try {
Class.forName(className);
} catch (ClassNotFoundException e) {
System.out.println("載入資料庫驅動程式失敗!");
e.printStackTrace();
}
}
/**
* @功能 擷取資料庫連接
*/
public void getCon() {
loadDrive();
try {
con = DriverManager.getConnection(url, username, password);
} catch (Exception e) {
System.out.println("串連資料庫失敗!");
e.printStackTrace();
}
}
/**
* @功能 擷取Statement對象
*/
public void getStm() {
getCon();
try {
stm = con.createStatement();
} catch (Exception e) {
System.out.println("擷取Statement對象失敗!");
e.printStackTrace();
}
}
/**
* @功能 查詢資料表,擷取結果集
*/
public void getRs(String sql) {
getStm();
try {
rs = stm.executeQuery(sql);
} catch (Exception e) {
System.out.println("查詢資料庫失敗!");
e.printStackTrace();
}
}
/**
* @功能 查詢資料表,擷取投票選項
*/
public List selectVote(String sql) {
List votelist = null;
if (sql != null && !sql.equals("")) {
getRs(sql);
if (rs != null) {
votelist = new ArrayList();
try {
while (rs.next()) {
VoteSingle voteSingle = new VoteSingle();
voteSingle.setId(MyTools.intToStr(rs.getInt(1)));
voteSingle.setTitle(rs.getString(2));
voteSingle.setNum(MyTools.intToStr(rs.getInt(3)));
voteSingle.setOrder(MyTools.intToStr(rs.getInt(4)));
votelist.add(voteSingle);
}
} catch (Exception e) {
System.out.println("封裝tb_vote表中資料失敗!");
e.printStackTrace();
} finally {
closed();
}
}
}
return votelist;
}
/**
* @功能 查詢資料表,擷取指定IP最後一次投票的記錄
*/
public TempSingle selectTemp(String sql) {
TempSingle tempSingle = null;
if (sql != null && !sql.equals("")) {
getRs(sql);
if (rs != null) {
try {
while (rs.next()) {
tempSingle = new TempSingle();
tempSingle.setId(MyTools.intToStr(rs.getInt(1)));
tempSingle.setVoteIp(rs.getString(2));
tempSingle.setVoteMSEL(rs.getLong(3));
tempSingle.setVoteTime(rs.getString(4));
}
} catch (Exception e) {
System.out.println("封裝tb_temp表中資料失敗!");
e.printStackTrace();
} finally {
closed();
}
}
}
return tempSingle;
}
/**
* @功能 更新資料表
*/
public int update(String sql) {
int i = -1;
if (sql != null && !sql.equals("")) {
getStm();
try {
i = stm.executeUpdate(sql);
} catch (Exception e) {
System.out.println("更新資料庫失敗!");
e.printStackTrace();
} finally {
closed();
}
}
return i;
}
/**
* @功能 關閉資料庫連接
*/
public void closed() {
try {
if (rs != null)
rs.close();
if (stm != null)
stm.close();
if (con != null)
con.close();
} catch (Exception e) {
System.out.println("關閉資料庫失敗!");
e.printStackTrace();
}
}
}
投票演算法原始碼:
(doVote.jsp)
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ page import="com.yxq.valuebean.TempSingle" %>
<%@ page import="com.yxq.toolbean.MyTools" %>
<%@ page import="java.util.Date" %>
<jsp:useBean id="myDb" class="com.yxq.toolbean.DB"/>
<%
String mess="";
String selectId=request.getParameter("ilike"); //擷取使用者選擇
if(selectId==null||selectId.equals("")){ //沒有選擇
mess="請選擇投票!";
}
else{ //選擇了
boolean mark=false; //是否允許投票的標誌
long today=(new Date()).getTime(); //new Date()擷取目前時間,通過調用Date類的getTime()方法擷取從1970年1月1日00:00:00起到目前時間的毫秒數
long last=0; //上次投票的時間(以毫秒顯示)
String ip=request.getRemoteAddr(); //擷取使用者IP地址
String sql="SELECT * FROM tb_temp WHERE voteMSEL = (SELECT MAX(voteMSEL) FROM tb_temp WHERE voteIp='"+ip+"')"; //SQL語句,功能:從資料表中擷取目前使用者上次投票時的記錄
TempSingle single=myDb.selectTemp(sql);
if(single==null) //在tb_temp表中不存在當前IP
mark=true; //允許投票
else{ //存在當前IP,則判斷從上次投票到現在是否超過指定時間,本系統指定為60分鐘
last=single.getVoteMSEL(); //從該JavaBean中擷取上次投票的時間(以毫秒顯示)
String result=MyTools.compareTime(today,last); //將現在時間與上次投票時的時間進行比較
if(result.equals("yes")) //返回"yes",表示時間差已超過60分鐘,允許投票
mark=true;
else //否則,不允許投票
mark=false;
}
String strTime=MyTools.formatDate(today); //將當前投票時間(以毫秒顯示的)轉為"年-月-日 時:分:秒"的形式
if(mark){ //允許投票
/** 【1】記錄使用者IP和投票時間 **/
sql="insert into tb_temp values('"+ip+"','"+today+"','"+strTime+"')";
int i=myDb.update(sql);
/** 【2】判斷記錄使用者IP是否成功 **/
if(i<=0) //記錄IP失敗
mess="系統在記錄您的IP地址時出錯!";
else{ //記錄IP成功
/** 更新票數 **/
sql="update tb_vote set vote_num=vote_num+1 where id="+selectId;
i=myDb.update(sql); //更新成功
if(i>0)
mess="投票生效! <img src='images/spic.jpg'>";
else //更新失敗
mess="投票失敗!";
}
}
else{ //不允許投票
mess="對不起,通過判斷您的IP,您已經投過票了!<br>上次投票時間:"+single.getVoteTime()+"<br>60分鐘之內不允許再進行投票!";
}
}
session.setAttribute("mess",mess); //儲存提示資訊到session範圍內
response.sendRedirect("messages.jsp"); //將請求重新導向到messages.jsp頁面,進行提示
%>