`
喧嚣求静
  • 浏览: 572596 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

JAVA 构建动态表格,数据统计处理利用内存数据库H2研究

    博客分类:
  • java
 
阅读更多
这几天,临时帮忙其他项目组做高级查询,后台处理好数据,动态生成报表一样的表格。

做成表格内容



------------------------------------------------------
考虑到,要把数据后期处理,若用Map,List,保存,不断的遍历,搜索,算法复杂
性能也不能保证,
考虑到内存数据库的优越性,只要把原始数据插入到H2中,后期的数据筛选,统计,只要查询SQL就可,而且H2支持JDBC操作,方便。
附件中有完整样例。

使用内存数据库H2工具类,
package com;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

public class CacheDB {

	private static final CacheDB instance = new CacheDB();
	private Connection conn = null;

	private CacheDB() {

	}

	@Override
	protected void finalize() throws Throwable {

		super.finalize();
		closeDB(conn);
	}

	public static CacheDB getInstance() {
		return instance;
	}

	public void openDB() {
		if(isOpenDB()){
			return;
		}
		try {
			Class.forName("org.h2.Driver");
			conn = DriverManager.getConnection("jdbc:h2:~/test", "sa", "");
			System.out.println("---------------------H2 数据库打开成功------------------");
		} catch (ClassNotFoundException e) {
			System.out
					.println("-------------------H2 数据库驱动找不到----------------");
		} catch (SQLException e) {
			System.out.println("-----------H2 数据库打开出错误------------");
			e.printStackTrace();
		}

	}

	public boolean createTable(String sql) {
		Statement st = null;
		try {
			st = getStatement();
			return st.execute(sql);
		} catch (SQLException e) {
			System.out.println("--------H2 数据库建表出错误---------");
			System.out.println(sql);
			e.printStackTrace();
		} finally {
			closeStatement(st);
		}
		return false;
	}
    /**
     * @deprecated
     * */
	public Object queryForObject(String sql){
		
		return null;
	} 
	
	
	public List queryForList(String sql,RowMapperH2  rowMapper){
		Statement st = null;
		ResultSet  rs=null;
		List result=new ArrayList();
			try {
				st = getStatement();
				rs=st.executeQuery(sql);
				int lineNumber=0;
				while(rs.next()){
					if(rowMapper!=null){
						
						result.add(rowMapper.mapRow(rs, lineNumber++));
					}else{
						
					}
				}
				
					
			} catch (SQLException e) {
				System.out.println("--------H2 数据库查询出错误---------");
				System.out.println(sql);
				e.printStackTrace();
			}finally{
				closeStatement(st);
				closeResultSet( rs);
			}
		return result;
	}
	public Double queryForDouble(String sql){
		
		Statement st = null;
		ResultSet  rs=null;
		
			try {
				st = getStatement();
				rs=st.executeQuery(sql);
				
				Double result=0.0;
				
				while(rs.next()){
					result=rs.getDouble(1);
				}
				//System.out.println("queryForDouble sql="+sql+"\nresult="+result);
				return result;
					
			} catch (SQLException e) {
				System.out.println("--------H2 数据库查询出错误---------");
				System.out.println(sql);
				e.printStackTrace();
			}finally{
				closeStatement(st);
				closeResultSet( rs);
			}
		return null;
	}
	
	
	
	public boolean delFromTable(String table, String whereSql) {
		if (table != null && table.length() != 0) {
			Statement st = null;
			StringBuffer bf = new StringBuffer("DELETE FROM ");
			try {
				st = getStatement();

				bf.append(table);
				if (whereSql != null)
					bf.append(whereSql);
				return st.execute(bf.toString());
			} catch (SQLException e) {
				System.out.println("--------H2 数据库删除数据出错误---------");
				System.out.println(bf.toString());
				e.printStackTrace();
			} finally {
				closeStatement(st);
			}
		}
		return false;

	}

	public boolean clearTable(String table) {

		return this.delFromTable(table, null);

	}

	public boolean insertTable(String table, String[] column, String[] values) {
		StringBuffer bf = new StringBuffer("INSERT INTO ");
		bf.append(table).append("(").append(change2str(column))
				.append(") value ( ").append(change2str(values)).append(" )");

		return insertTable(bf.toString());

	}
	public boolean insertTable(String sql) {
		if (conn != null) {
			Statement st = null;
			try {
				st = conn.createStatement();
				return st.execute(sql);

			} catch (SQLException e) {
				System.out.println("--------H2 数据库插入数据出错误---------");
				System.out.println(sql);
				e.printStackTrace();
			} finally {
				closeStatement(st);
			}
		}

		return false;
	}

	private Statement getStatement() throws SQLException {
		if (conn != null)
			return conn.createStatement();
		return null;
	}

	
	public void closeDB(Connection _conn) {
		if (_conn != null)
			try {
				_conn.close();
			} catch (SQLException e) {
				System.out.println("--------H2 数据库Connection关闭出错误---------");
				e.printStackTrace();
			}
	}

	public void closeDB() {
		if (conn != null)
			try {
				conn.close();
			} catch (SQLException e) {
				System.out.println("--------H2 数据库Connection关闭出错误---------");
				e.printStackTrace();
			}
	}
	
	private void closeStatement(Statement st) {
		if (st != null)
			try {
				st.close();
			} catch (SQLException e) {
				System.out.println("--------H2 数据库Statement关闭出错误---------");
				e.printStackTrace();
			}
	}
	private void closeResultSet(ResultSet rs) {
		if (rs != null)
			try {
				rs.close();
			} catch (SQLException e) {
				System.out.println("--------H2 数据结果集ResultSet关闭出错误---------");
				e.printStackTrace();
			}
	}
	private String change2str(String[] obj) {
		return obj.toString().replace("[", "").replace("]", "");
	}
	private boolean isOpenDB(){
		return conn!=null?true:false; 
	}
}







数据格式


  • 大小: 104.7 KB
  • 大小: 100.2 KB
分享到:
评论

相关推荐

    用Swing做的H2的管理器

    1. **GUI组件**:Swing提供了各种组件,如JFrame(主窗口)、JTable(表格显示数据)、JButton(按钮)、JTextField(文本输入框)等,这些组件构建了可视化界面,使用户能够直观地查看和操作数据库表、记录和查询...

    H2DB所需的jar和DEMO示例,可直接导进eclipse中

    H2DB是一款开源的、高性能的Java内存数据库系统,它被设计为轻量级且易于嵌入到Java应用中。这个压缩包包含了使用H2DB所需的基本资源,特别是对于初学者来说,是一个理想的入门工具。 首先,我们关注的是"H2db"这个...

    行程日历表格demo+java

    综上所述,“行程日历表格demo+java”涵盖了许多Java开发的核心概念和技术,包括日期时间处理、数据库操作、GUI设计、事件处理、软件设计模式以及测试和版本控制。理解并掌握这些知识点,开发者可以构建出功能完善的...

    Java员工信息管理系统

    另外,Java SE环境提供了丰富的API和库,如集合框架、I/O流、线程等,使得开发人员可以方便地处理数据和实现并发操作。如果系统设计得当,用户界面可能使用Swing或JavaFX库来构建,提供友好的图形用户界面,让用户...

    基于springboot+vue的员工信息管理系统源码数据库.zip

    开发者可能使用JPA(Java Persistence API)或MyBatis这样的持久层框架来处理数据库操作,实现数据的CRUD(创建、读取、更新、删除)。 项目中的子文件可能包括以下部分: 1. **源码**:分为前后端两部分,后端代码...

    JAVA+SQL电子通讯录带系统托盘(论文+源代码).rar

    开发者可能使用了Java Swing或JavaFX库来构建图形用户界面(GUI),这些库提供了丰富的组件,如按钮、文本框、表格等,用于构建通讯录的界面元素。此外,Java的多线程特性可能被用来确保程序在后台运行时依然响应...

    jxc.rar_JXC java_jxc_进销存_进销存 JAVA_进销存管理系统

    3. **数据库操作**:项目可能使用了SQL数据库(如MySQL、Oracle或H2),开发者需要熟练掌握JDBC(Java Database Connectivity)进行数据访问,包括连接数据库、执行SQL语句、事务处理等。 4. **Swing或JavaFX**:这...

    java swing学生管理系统

    从“StudentSQL”这个标签来看,该系统很可能使用了SQL(结构化查询语言)来处理数据。可能采用了如MySQL、SQLite或H2等关系型数据库来存储学生信息。开发者通过JDBC(Java Database Connectivity)接口与数据库进行...

    java swing通讯录管理系统源码.zip_考虑一个通讯录管理系统

    通过研究这个源码,初学者可以学习到Java Swing的基本用法,理解如何构建桌面应用,以及如何使用JDBC操作数据库。对于有经验的开发者来说,这是一个了解如何整合Swing和数据库的好实例,也可以作为改进或扩展功能的...

    springboot框架+thymeleaf模板引擎+layui前端框架+数据库

    综上所述,这个开源项目利用SpringBoot的便利性,结合Thymeleaf的模板渲染,Layui的前端展示,以及数据库和Redis的后台支持,构建了一个全面的Web应用解决方案。这样的组合为开发者提供了一站式的开发体验,使得项目...

    JAVA+SQL电子通讯录带系统托盘(论文+源代码).zip

    总的来说,《JAVA+SQL电子通讯录带系统托盘》项目融合了Java GUI编程、SQL数据库操作、系统托盘功能实现、数据管理、线程处理等多个重要知识点,对于学习和理解Java应用开发具有很高的参考价值。通过研究源代码和...

    一个简单的商品销售管理系统

    在Java中,可以利用Spring框架实现这一模式,其中Model代表业务对象,View负责展示数据,而Controller处理用户请求并协调Model和View之间的交互。 【Java技术栈】: 1. **Java基础**:系统主要用Java编写,所以...

    swing做的通信录

    总的来说,“Swing做的通信录”是一个典型的Java桌面应用实例,它结合了Swing的GUI功能和JDBC的数据库操作,通过事件处理和数据绑定实现了用户友好的交互体验。这个项目不仅展示了Swing的基本用法,还涵盖了数据库...

    JAVA+SQL电子通讯录带系统托盘(+源代码).zip

    在通讯录系统中,Java主要负责UI界面的构建,事件处理,以及与数据库的交互。例如,Swing库可以用于创建用户界面,包括添加、编辑和删除联系人的按钮,以及显示联系人信息的表格等。同时,Java的多线程机制可以确保...

    java 图书管理系统~~

    3. **数据库管理**:系统通常会使用如MySQL、Oracle或H2等关系型数据库存储图书信息,包括书名、作者、出版社、ISBN号、库存数量等。SQL(结构化查询语言)用于与数据库进行交互,进行数据的增删改查操作。 4. **...

    Java Web应用开发 32 课堂案例-检索最新商品信息.docx

    `<table>`、`<tr>`、`<th>`和`<td>`标签用于构建表格结构,`<center>`和`<h2>`标签则用于样式和标题设置。 综上所述,这个案例涵盖了Java Web开发中的基本数据库操作流程,包括数据库连接、SQL查询、结果集处理以及...

    Java毕设:考评系统,采用springboot+bootstrap+jquery.zip

    同时,这也是一个实践Maven构建工具、数据库集成(如MySQL、H2等)、RESTful API设计、模板引擎(如Thymeleaf或Freemarker)以及Spring Security等附加功能的好机会。对于学生或初学者来说,这是一个全面理解现代...

    javaweb实验报告.pdf

    Java Web 实验报告主要涵盖了三个核心知识点:客户端开发设计、基础语法(JavaScript 验证)以及程序设计(JSP ...通过这些实践,学生能够深入理解Web应用程序的工作原理,以及如何利用Java技术来构建交互式的Web应用。

    jdbi:jdbi旨在使用Java提供便利的表格数据访问; 包括模板化SQL,参数化和强类型查询以及Streams集成

    Jdbi库提供了对Java关系数据库的方便,惯用的访问。 Jdbi建立在JDBC之上。 如果您的数据库具有JDBC驱动程序,则可以将其与Jdbi一起使用。 先决条件 Jdbi 3需要Java 8或更高版本才能运行。 Jdbi 3需要Java 11或更高...

Global site tag (gtag.js) - Google Analytics