java代码获取数据库表里数据的总数操作

作者:可乐opp 时间:2024-01-14 23:41:31 

在访问数据库时,特别是新手,可能会需要查询表中数据总数,以下这段代码可以非常简便的获取到数据数目


//先建立数据库连接,执行查询语句
Connection conn = DriverManager.getConnection(URL, USER, PassWord);
Statement st=conn.createStatement();
ResultSet rs =st.executeQuery("select count(*) as result from tablename");
//创建变量存取个数
int count=0;
while(rs.next())
{
count=getInt(1);
}

补充知识:JavaWeb 之 Listener * 及Session的钝化与活化

概念

* 用于监听web应用中某些对象、信息的创建、销毁、增加,修改,删除等动作的

发生,然后作出相应的响应处理。当范围对象的状态发生变化的时候,服务器自动调用

* 对象中的方法。

常用于统计在线人数和在线用户,系统加载时进行信息初始化,统计网站的访问量等。

创建步骤

创建类

实现指定的 * 接口中的方法

在web.xml文件中配置监听/在类上标注@WebListener 注解

第一类:域对象 *

监听域对象 创建与销毁的 *

* 接口描述
ServletContextListener监听Servlet上下文对象的创建、销毁
HttpSessionListener监听会话对象的创建、销毁
ServletRequestListener监听请求对象的创建、销毁

Servlet上下文对象 创建和销毁的 *


public class ApplicationListener implements ServletContextListener {
//Servlet上下文对象创建的时候被调用
@Override
public void contextInitialized(ServletContextEvent contextEvent) {
System.out.println("Servlet上下文对象被创建啦...");

//项目一旦启动,此处代码运行!
Timer timer=new Timer();
//5秒钟之后开始执行,以后每间隔2秒发送一封邮件!
timer.schedule(new TimerTask() {
@Override
public void run() {
//System.out.println("发邮件...."+new Date());
}
}, 5000, 2000);
}
//Servlet上下文对象销毁的时候被调用
@Override
public void contextDestroyed(ServletContextEvent contextEvent) {
System.out.println("Servlet上下文对象被销毁啦...");
//服务器在停止的时候,要执行某些动作,那么就可以把代码写在这个位置!!!
}
}

<!-- web.xml中配置 -->
<listener>
<listener-class>com.dream.listener.ApplicationListener</listener-class>
</listener>

会话对象 创建和销毁的 *


@WebListener
public class SessionListener implements HttpSessionListener{
@Override
public void sessionCreated(HttpSessionEvent event) {
HttpSession session = event.getSession();
System.out.println("session对象创建啦...."+session.getId());
}
@Override
public void sessionDestroyed(HttpSessionEvent event) {
HttpSession session = event.getSession();
System.out.println("session对象销毁啦...."+session.getId());
}
}

请求对象的创建和销毁的 *


@WebListener
public class RequestListener implements ServletRequestListener{

@Override
public void requestInitialized(ServletRequestEvent event) {
ServletRequest request = event.getServletRequest();
System.out.println("Request对象的创建...."+request);
}
@Override
public void requestDestroyed(ServletRequestEvent event) {
ServletRequest request = event.getServletRequest();
System.out.println("Request对象的销毁...."+request);
}

}

案例:统计网站在线人数


@WebListener
public class ApplicationListener implements ServletContextListener{
@Override
public void contextInitialized(ServletContextEvent event) {
//项目启动,向application对象中存一个变量,初始值0
ServletContext application = event.getServletContext();
application.setAttribute("count", 0);
}
@Override
public void contextDestroyed(ServletContextEvent event) {
}
}

@WebListener
public class SessionListener implements HttpSessionListener {

@Override
public void sessionCreated(HttpSessionEvent event) {
// 有人访问了 count++
HttpSession session = event.getSession();
ServletContext application = session.getServletContext();

int count =(Integer) application.getAttribute("count");
count++;
application.setAttribute("count", count);
}
@Override
public void sessionDestroyed(HttpSessionEvent event) {
// 有人离开了 count--
HttpSession session = event.getSession();
ServletContext application = session.getServletContext();

Integer count =(Integer) application.getAttribute("count");
count--;
application.setAttribute("count", count);
}
}

第二类:属性 *

监听域对象属性变化的 *

* 接口描述
ServletContextAttributeListener监听Servlet上下文对象属性的创建、删除、替换
HttpSessionAttributeListener监听会话对象属性的创建、删除、替换
ServletRequestAttributeListener监听请求对象属性的创建、删除、替换

Servlet上下文对象属性变化的 *


@WebListener
public class ApplicationAttributeListener implements ServletContextAttributeListener{

//Servlet上下文对象新增值的时候被调用
@Override
public void attributeAdded(ServletContextAttributeEvent event) {
String str = "Servlet上下文对象中添加了属性:"+event.getName()
     +",属性值是:"+event.getValue();
System.out.println(str);
}
//Servlet上下文对象删除值的时候被调用
@Override
public void attributeRemoved(ServletContextAttributeEvent event) {
String str = "Servlet上下文对象中删除了属性:"+event.getName()
     +",属性值是:"+event.getValue();
System.out.println(str);
}
//Servlet上下文对象替换值的时候被调用
@Override
public void attributeReplaced(ServletContextAttributeEvent event) {
String str = "Servlet上下文对象中替换了属性:"+event.getName()
     +",属性值是:"+event.getValue();
System.out.println(str);
}
}

第三类:监听HttpSession中的对象(JavaBean)

前两类 * 是作用在 ServletContext HttpSession ServletRequest上

第三类 * 是作用在JavaBean上的。

注意:这类 * 不需要在web.xml中配置

* 接口描述
HttpSessionBindingListener监听会话对象中JavaBean对象的绑定、删除
HttpSessionActivationListener监听会话对象中JavaBean对象的钝化、活化

会话对象中JavaBean对象的绑定和删除的 *

实现了HttpSessionBindingListener接口的JavaBean对象可以感知自己被绑定到Session中和 Session中删除的事件

当对象被绑定到HttpSession对象中时,web服务器调用该对象的

void valueBound(HttpSessionBindingEvent event)方法

当对象从HttpSession对象中解除绑定时,web服务器调用该对象的

void valueUnbound(HttpSessionBindingEvent event)方法


public class User implements HttpSessionBindingListener {
private int id;
private String name;

public User() {
}
public User(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void valueBound(HttpSessionBindingEvent event) {
System.out.println("对象绑定到了Session中");
}
public void valueUnbound(HttpSessionBindingEvent event) {
System.out.println("对象从Session中移除");
}
}

<%@ page import="com.dream.vo.User"%>
<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML>
<html>
<head>
<title>ServletContextAttributeListener * 测试</title>
</head>
<body>
<%
User user = new User(1, "aaa");
session.setAttribute("user", user);
session.removeAttribute("user");
%>
</body>
</html>

会话对象中JavaBean对象的钝化和活化的 *

实现了HttpSessionActivationListener接口的JavaBean对象可以感知自己被活化(反序列化)和钝化(序列化)的事件

钝化(序列化):在内存中JavaBean对象通过Session存储硬盘的过程

活化(反序列化):从硬盘中通过Session取出JavaBean对象到内存的过程

javabean对象将要随Session对象被钝化(序列化)之前,web服务器调用该对象的

void sessionWillPassivate(HttpSessionEvent event) 方法

这样javabean对象就可以知道自己将要和Session对象一起被钝化到硬盘中

javabean对象将要随Session对象被活化(反序列化)之后,web服务器调用该对象的void sessionDidActive(HttpSessionEvent event)方法

这样javabean对象就可以知道自己将要和Session对象一起被活化回到内存中

注意: 想要随着Session 被钝化、活化的对象它的类必须实现Serializable 接口,放在

Session中没有实现Serilizable接口的对象,在Session钝化时,不会被序列化到磁盘上。


public class User implements Serializable, HttpSessionActivationListener{
private static final long serialVersionUID = -1566395353697458460L;
private int id;
private String name;
public User() {
}
public User(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//钝化
@Override
public void sessionWillPassivate(HttpSessionEvent event) {
System.out.println("对象被钝化......." + event.getSource());
}
//活化
@Override
public void sessionDidActivate(HttpSessionEvent event) {
System.out.println("对象被活化......");
}
}

在WebContent\META-INF文件夹下创建一个context.xml文件


<?xml version="1.0" encoding="UTF-8"?>
<Context>
<!--
maxIdleSwap:"1": session如果1分钟没有使用就序列化
directory: 序列化后文件所保存的路径
-->
<Manager className="org.apache.catalina.session.PersistentManager"
maxIdleSwap="1">
<Store className="org.apache.catalina.session.FileStore"  
 directory="C:\\text" />
</Manager>
</Context>

面试题:Session 的钝化与活化

钝化:当服务器正常关闭时,还存活着的session(在设置时间内没有销毁) 会随着服务

器的关闭被以文件(“SESSIONS.ser”)的形式存储在tomcat 的work 目录下,这个过程叫

做Session 的钝化。

活化:当服务器再次正常开启时,服务器会找到之前的“SESSIONS.ser” 文件,从中恢

复之前保存起来的Session 对象,这个过程叫做Session的活化。

注意事项

想要随着Session 被钝化、活化的对象它的类必须实现Serializable 接口,还有的是只有在服务器正常关闭的条件下,还未超时的Session 才会被钝化成文件。当Session 超时、调用invalidate方法或者服务器在非正常情况下关闭时,Session 都不会被钝化,因此也就不存在活化。

在被钝化成“SESSIONS.ser” 文件时,不会因为超过Session 过期时间而消失,这个文件会一直存在,等到下一次服务器开启时消失。

当多个Session 被钝化时,这些被钝化的Session 都被保存在一个文件中,并不会为每个Session 都建立一个文件。

来源:https://blog.csdn.net/qq_39569728/article/details/79687332

标签:java,数据库,数据
0
投稿

猜你喜欢

  • python实现简单的名片管理系统

    2022-12-28 21:19:05
  • mysql 备份与迁移 数据同步方法

    2024-01-13 14:19:26
  • vue项目中如何引入cesium

    2024-05-28 15:52:29
  • mysql中的sql_mode模式实例详解

    2024-01-19 14:56:45
  • PHP convert_cyr_string()函数讲解

    2023-06-05 00:43:42
  • Python中if语句的使用方法及实例代码

    2022-03-24 07:17:04
  • keras K.function获取某层的输出操作

    2023-03-11 15:10:21
  • PHP判断数组是否为空的常用方法(五种方法)

    2024-05-11 09:25:53
  • ORACLE常用数值函数、转换函数、字符串函数

    2023-07-21 02:03:40
  • 详解scratch3.0二次开发之scratch-blocks中的blocks的类型、定义和使用方法

    2023-10-18 06:02:09
  • python微信好友数据分析详解

    2022-01-27 20:36:39
  • mysql 按中文字段排序

    2024-01-14 18:04:19
  • Python入门_浅谈数据结构的4种基本类型

    2021-01-11 19:12:28
  • 基于python分享一款地理数据可视化神器keplergl

    2023-09-27 20:54:05
  • TensorFlow搭建神经网络最佳实践

    2021-03-11 18:59:26
  • 浅谈解决360兼容模式浏览器的方法

    2023-09-17 01:11:39
  • Pytorch 实现变量类型转换

    2021-09-27 23:35:47
  • 如何利用JSHint减少JavaScript的错误

    2024-05-28 15:37:40
  • 不管你的Python报什么错,用这个模块就能正常运行

    2023-08-29 14:42:43
  • Python实现新版正方系统滑动验证码识别

    2022-11-08 09:14:32
  • asp之家 网络编程 m.aspxhome.com