JAvaプログラム設計

22073 ワード

IPアドレスカウンタ
原理:ユーザーのIPアドレスを取得して、それからデータベースに保存して、再びアクセスする時データベースがこのデータが存在するかどうかを照会して、このプログラムを完成することができます
せっけいプロセス
接続データベースクラス:DBを作成します.java
package com.count.Online;

import java.sql.*;

public class DB {
    private Connection con;
    private Statement stm;
    private ResultSet rs;
    private final static String url = "jdbc:mysql://localhost:3306/oumyye";
    private final static String dbDriver = "com.mysql.jdbc.Driver";
    //              
    static {
        try {
            Class.forName(dbDriver).newInstance();
        } catch (Exception ex) {
            System.out.println("       ");
        }
    }

    //        
    public Connection getCon() {
        try {
            con = DriverManager.getConnection(url,"root","root");
            System.out.println(con);
            con.setAutoCommit(true);
            

        } catch (SQLException e) {
            System.out.println(e.getMessage());
            System.out.println("creatConnectionError!");
        }
        return con;
    }
    public Statement getStm(){
        try{
           con=getCon();
           stm=con.createStatement();
        }catch(Exception e){e.printStackTrace(System.err);}
         return stm;
      }
      public Statement getStmed(){
        try{
           con=getCon();
           stm=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
        }catch(Exception e){e.printStackTrace(System.err);}
        return stm;
    }
    public ResultSet search(String sql){
        getStm();
        try{
            rs=stm.executeQuery(sql);
        }catch(Exception e){e.printStackTrace();}
        return rs;
    }
    public int dosql(String sql){
        System.out.println(sql);
        int i=-1;
        getStm();
        try{
            i=stm.executeUpdate(sql);
        }catch(Exception e){e.printStackTrace();}
        return i;
    }
    public void closed(){
        try{
            if(rs!=null)rs.close();
        }
        catch(Exception e){e.printStackTrace();}        
        try{
            if(stm!=null)stm.close();
        }
        catch(Exception e){e.printStackTrace();}        
        try{
            if(con!=null)con.close();
        }
        catch(Exception e){e.printStackTrace();}        
    }
}

コア操作クラスCountOnlineを作成します.java
package com.count.Online;

import java.sql.*;
public class CountOnline {
    private String userip;
    private String nowdate;
    private int times;
    private DB db=new DB();
    public CountOnline(){}
    public void setUserip(String userip){
        this.userip=userip;
    }
    public String getUserip(){
        return this.userip;
    }
    public void setNowdate(String nowdate){
        this.nowdate=nowdate;
    }
    public String getNowdate(){
        return this.nowdate;
    }
    public void setTimes(int times){
        this.times=times;
    }
    public int getTimes(){
        return this.times;
    }
    public ResultSet adduser(){
        ResultSet rs=null;
        String sql="insert into tb_IPcount values("+this.times+",'"+this.userip+"','"+this.nowdate+"')";
        try{
            db.dosql(sql);
            rs=db.search("select * from tb_IPcount");
        }catch(Exception e){e.printStackTrace();}
        return rs;
    }
    public void dbclose(){
        db.closed();
    }
}

ユーザーがアクセスするページindex.jsp
<%@ page contentType="text/html;charset=GBK"%>
<%@ page import="java.util.Date,java.text.*,java.sql.*" %>
<jsp:useBean id="mycount" class="com.count.Online.CountOnline"/>
<jsp:useBean id="mydb" class="com.count.Online.DB"/>
<%
  SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
  String sql="select MAX(user_order) from tb_IPcount as max";
  ResultSet rs=mydb.search(sql);
  rs.next();
  int max=rs.getInt(1);
  mydb.closed();
  mycount.setTimes(max+1);
  String ip=request.getRemoteAddr();
  mycount.setUserip(ip);
  String nowdate=format.format(new Date());
  mycount.setNowdate(nowdate);
  rs=mycount.adduser();
%>
<html>
  <head>
    <title>    IP      </title>
     <link rel="stylesheet" type="text/css" href="css/style.css">
  </head>
  <body>
    <center>
      <table height="90" width="400" border="1" bordercolor="black" bordercolorlight="black" bordercolordark="white" cellspacing="0" style="margin-top:200">
        <tr bgcolor="lightgrey">
         <td align="center"> N    </td>
         <td align="center">   IP  </td>
         <td align="center">    </td>
        </tr>
        <%
           while(rs.next()){
        %>
        <tr>
          <td align="center"><%=rs.getInt("user_order")%></td>
          <td align="center"><%=rs.getString("user_ip")%></td>
          <td align="center"><%=rs.getString("user_time")%></td>
        </tr>
        <%
           }
           mycount.dbclose();
        %>
        <tr>
         <td align="center" colspan="3">
              <%=max+1%><br>
             IP :<%=ip%>
           <br><%=nowdate%>
         </td>
        </tr>
      </table>
    </center>
  </body>
</html>

このプログラムはmysqlデータベースを使用しています.mysqlドライバパッケージをインポートする必要があります.
データベーステーブル構造
CREATE TABLE `tb_ipcount` (
  `user_order` int(10) DEFAULT NULL,
  `user_ip` varchar(20) DEFAULT NULL,
  `user_time` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

このプログラムには新しい機能も追加できます
合計どれだけのipアドレス、各ipアドレスへのアクセス回数を算出します.
インスタンス2
データベース接続コード
CountOnline.java
package com.count.Online;

import java.sql.*;
public class CountOnline {
    private String userip;
    private String nowdate;
    private int times;
    private DB db=new DB();
    public CountOnline(){}
    public void setUserip(String userip){
        this.userip=userip;
    }
    public String getUserip(){
        return this.userip;
    }
    public void setNowdate(String nowdate){
        this.nowdate=nowdate;
    }
    public String getNowdate(){
        return this.nowdate;
    }
    public void setTimes(int times){
        this.times=times;
    }
    public int getTimes(){
        return this.times;
    }
    public ResultSet checkuser(){
        String sql="select * from tb_newusercount where user_ip='"+this.userip+"'";
        ResultSet rs=null;
        try{
            rs=db.search(sql);
            if(rs.next()){
                this.times=rs.getInt("user_times")+1;
                sql="update tb_newusercount set user_times="+this.times+" where user_ip='"+this.userip+"'";
                db.dosql(sql);
            }
            else{
                this.times=1;
                sql="insert into tb_newusercount values('"+this.userip+"',1)";
                db.dosql(sql);
            }
            rs=db.search("select * from tb_newusercount");
        }catch(Exception e){e.printStackTrace();}
        return rs;
    }
    public void dbclose(){
        db.closed();
    }
}

インタフェースコードindex.jsp
<%@ page contentType="text/html;charset=GBK"%>
<%@ page import="java.sql.*" %>
<jsp:useBean id="mycount" class="com.count.Online.CountOnline"/>
<%
  String ip=request.getRemoteAddr();
  mycount.setUserip(ip);
  ResultSet rs=mycount.checkuser();
  rs.last();
  int num=rs.getRow();
%>
<html>
  <head>
    <title>           </title>
     <link rel="stylesheet" type="text/css" href="css/style.css">
  </head>
  <body>
    <center>
      <table height="90" width="200" border="1" bordercolor="black" bordercolorlight="black" bordercolordark="white" cellspacing="0" style="margin-top:200">
        <tr bgcolor="lightgrey">
         <td align="center">   IP  </td>
         <td align="center">    </td>
        </tr>
        <%
           rs.beforeFirst();
           while(rs.next()){
        %>
        <tr>
          <td align="center"><%=rs.getString("user_ip")%></td>
          <td align="center"><%=rs.getInt("user_times")%></td>
        </tr>
        <%
           }
        %>
        <tr>
         <td align="center" colspan="2">
             IP :<%=ip%>
           <br><%=mycount.getTimes()%> 
           <br>
              <%=num%>          
         </td>
        </tr>
      </table>
      <%
        mycount.dbclose();
      %>
    </center>
  </body>
</html>