在开始此项目前一定要保证:
项目里导入了mysql-connector-java-8.0.12.jar
具体做法请参考:https://blog.csdn.net/c1776167012/article/details/104815125 (java文件连接mysql)
和
https://blog.csdn.net/c1776167012/article/details/105076285 (jsp文件连接mysql)
1.首先,建立一张表:
重要参数:
数据库名称:jdbc
表名称:tb_IPcount
三个参数名称:
1.user_order:记录访客个数
2.user_ip:记录访客ip
3.user_time:记录访问时间
sql语句如下:
mysql> use jdbc;
Database changed
mysql> create table tb_IPcount(
-> user_order int(10) not null,
-> user_ip varchar(50) not null,
-> user_time varchar(50) not null);
Query OK, 0 rows affected (0.15 sec)
mysql> insert into tb_IPcount values(
-> 1,'123.43.456.54','2019-12-12');
Query OK, 1 row affected (0.01 sec)
mysql> select * frome tb_IPcount;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'frome tb_IPcount' at line 1
mysql> select * from tb_IPcount;
+------------+---------------+------------+
| user_order | user_ip | user_time |
+------------+---------------+------------+
| 1 | 123.43.456.54 | 2019-12-12 |
+------------+---------------+------------+
1 row in set (0.00 sec)
2.然后专门编写一个类,里面装了对数据库的操作方法:DB.java:
它提供了一下功能:
1.连接数据库
2.查询数据库
3.更新数据库
package com.count.Online;
import java.sql.*;
public class DB {
private Connection con;
private Statement stm;
private ResultSet rs;
private String url="jdbc:mysql://localhost:3306/jdbc?&useSSL=false&serverTimezone=UTC";
private String classname="com.mysql.cj.jdbc.Driver";
public DB(){}
public Connection getCon()
{
try{
Class.forName(classname);
}catch(ClassNotFoundException e)
{
e.printStackTrace();
}
try{
con=DriverManager.getConnection(url,"root","root");
}catch(Exception e)
{
e.printStackTrace();
con=null;
}
return con;
}
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)
{
getStmed();
try{
rs=stm.executeQuery(sql);
}catch(Exception e)
{
e.printStackTrace();
}
return rs;
}
public int dosql(String sql)
{
int i=-1;
getStmed();
try{
i=stm.executeUpdate(sql);
}catch(Exception e){
e.printStackTrace();
}
return i;
}
public void closed()
{
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
3.再编写一个类,实现对数据库具体信息的添加: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 userip;
}
public void setNowdate(String nowdate)
{
this.nowdate=nowdate;
}
public String getNowdate()
{
return nowdate;
}
public void setTimes(int times)
{
this.times=times;
}
public int getTimes()
{
return 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();
}
}
4.最后编写:index.jsp文件
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import="java.util.Date,java.text.*,java.sql.*" %>
<jsp:useBean id="mycount" class="com.count.Online.CountOnline"></jsp:useBean>
<jsp:useBean id="mydb" class="com.count.Online.DB"></jsp:useBean>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>ip地址计数</title>
</head>
<body>
<%
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();//获得用户ip
mycount.setUserip(ip);
String nowdate=format.format(new Date());
mycount.setNowdate(nowdate);
rs=mycount.adduser();
%>
<table>
<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 %>位访问者!</td>
</tr>
</table>
</body>
</html>
结果: