- 浏览: 1064669 次
- 性别:
- 来自: 长沙
文章分类
- 全部博客 (639)
- 服务器配置篇 (58)
- hibernate篇 (14)
- spring篇 (33)
- struts篇 (28)
- JS篇 (46)
- 其他技术篇 (46)
- 数据库集群配置 (6)
- JAVA基础相关 (48)
- 分布式框架HadHoop的应用 (2)
- FLEX篇 (8)
- SQLSERVER技术 (32)
- Android学习 (13)
- amchart学习笔记 (1)
- openfire+smark搭建即时通讯 (9)
- Linux学习 (18)
- Oracle数据库 (15)
- 网站优化技术 (12)
- mysql数据库 (2)
- 项目学习总结 (18)
- 工具类(JAVA) (12)
- 工具类(JS) (2)
- 设计模式 (10)
- Lucene学习 (24)
- EJB3学习 (6)
- Sphinx搜索引擎 (3)
- 工作中用到的软件小工具 (5)
- .NET (49)
- JAVA 连接SQLSERVER2008步骤 (1)
- MongoDB (19)
- Android手机开发 (3)
- Maven (6)
- vue (9)
- Shiro (4)
- mybatis (3)
- netty框架 (1)
- SpringCloud (3)
- spring-cloud (7)
- Git (1)
- dubbo (2)
- springboot (13)
- rocketmq (1)
- git学习 (2)
- kafka服务器 (2)
- linux (10)
- WEB系统辅助项目 (1)
- jenkins (2)
- docker (4)
- influxdb (3)
- python (2)
- nginx (1)
最新评论
-
jiangfuofu555:
这样数据量大,效率怎么样?
sqlserver 实现分页的前台代码 以及后台的sqlserver语句 -
w156445045:
博主请问下,如何做到实时的刷新呢,
另外我后台是Java 谢谢 ...
web 版本的汽车仪表盘,非常好看。还有各种图形 -
jackyin5918:
<transportConnector name=&qu ...
ActiveMQ的activemq.xml详细配置讲解 -
握着橄榄枝的人:
你这个不是spring1.x的吧
spring1.x使用AOP实例 -
xiaophai:
全乱套了!
openfire+spark搭建完美的及时通讯
一下是一个DB4O的操作DAO。
作为DB4O在WEB项目中的操作,如果每次调用接口NEW一个对象去取得查询文件的时候,系统会报错,表示所读的DB文件已经被锁住了。查看了网上的一些解决方式。最后自己实现,解决了问题。
解决方法。在WEB容器启动的时候,新建一个监听器
WebListener.java
package common.listener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import common.util.db4o.LogMessageDao;
public class WebListener implements ServletContextListener {
LogMessageDao logdao;
private static final ThreadLocal local = new ThreadLocal();
public void contextDestroyed(ServletContextEvent sce) {
// TODO Auto-generated method stub
}
public void contextInitialized(ServletContextEvent event) {
String path =event.getServletContext().getRealPath("/log/log.db");
logdao = logdao.getInstance(path);
//local.set(logdao);
event.getServletContext().setAttribute("LogDao", logdao);
//在监听器中将要用到查DB文件的DAO类放入到ServletContext中
// TODO Auto-generated method stub
}
}
然后在我们用用的时候,在一个JSP页面的用法,从ServletContext中拿出来。
LogMessageDao logdao = (LogMessageDao)config.getServletContext().getAttribute("LogDao");
System.out.println("logdao:"+logdao);
List<LogMessage> list= logdao.getAllMessage();
for(int i=0;i<list.size();i++)
{
LogMessage lg = (LogMessage)list.get(i);
%>
<log>
<perid><%=lg.getPerID() %></perid>
<remoteip><%=lg.getRemoteIP() %></remoteip>
<date><%=lg.getDate() %></date>
</log>
<%
}
//这样就不会造成文件被锁住了。
下面是DAO的JAVA文件
package common.util.db4o;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import com.db4o.Db4o;
import com.db4o.ObjectContainer;
import com.db4o.ObjectSet;
import com.db4o.config.Configuration;
import com.db4o.io.CachedIoAdapter;
import com.db4o.io.RandomAccessFileAdapter;
import com.db4o.query.Constraint;
import com.db4o.query.Query;
public class LogMessageDao {
private static LogMessageDao messageDao = null;
private Configuration configuration = null;
private ObjectContainer db = null;
private String path;
private LogMessageDao(String path) {
configuration = Db4o.newConfiguration();
// configuration.io(new RandomAccessFileAdapter());
configuration.io(new CachedIoAdapter(new RandomAccessFileAdapter()));
configuration.optimizeNativeQueries(true);
configuration.objectClass(LogMessage.class).objectField("perID").indexed(true);
configuration.objectClass(LogMessage.class).objectField("remoteIP").indexed(true);
configuration.objectClass(LogMessage.class).objectField("date").indexed(true);
this.path = path;
openDB4O(path);
}
/**
* 获取实例
* @param path
* @return
*/
public static LogMessageDao getInstance(String path) {
if (messageDao == null) {
messageDao = new LogMessageDao(path);
}
return messageDao;
}
public List<LogMessage> getHistory(String to, String beginDate, String endDate,int msgType) {
List<LogMessage> msgList = null;
Query query = db.query();
query.constrain(LogMessage.class);
Constraint constr = query.descend("from").constrain(to);
query.descend("date").constrain(beginDate).greater().equal();
query.descend("date").constrain(endDate).smaller().equal();
if(msgType == 0){ //msgType=0 表示查询普通聊天记录
query.descend("to").constrain(to).or(constr);
} else if(msgType == 1){ //msgType=1 表示查询群聊天记录
query.descend("from").constrain(to);
}
query.descend("date_time").orderAscending();
ObjectSet result = query.execute();
msgList = (result == null) ? new ArrayList<LogMessage>() : result;
return msgList;
}
/**
* 查询外部IM的历史记录
* @param to 查询对象
* @param me 查询人的jid
* @param con 当前xmpp连接实例
* @param beginDate 查询的开始日期
* @param endDate 查询的结束日期
* @return
*/
public List<LogMessage> getImHistory(String to, String me, String con, String beginDate, String endDate) {
List<LogMessage> msgList;
Query query = db.query();
query.constrain(LogMessage.class);
Constraint constr1 = query.descend("from").constrain(me);
Constraint constr2 = query.descend("from").constrain(to);
Constraint constr3 = query.descend("to").constrain(con).and(constr2);
query.descend("date").constrain(beginDate).greater().equal();
query.descend("date").constrain(endDate).smaller().equal();
query.descend("to").constrain(to).and(constr1).or(constr3);
query.descend("date_time").orderAscending();
ObjectSet result = query.execute();
msgList = (result == null) ? new ArrayList() : result;
return msgList;
}
/**
* 获取一个群最后一个消息的收发时间
* @param room
* @return
*/
public long getLastMsgDate(String room){
Query query = db.query();
query.constrain(LogMessage.class);
query.descend("from").constrain(room);
query.descend("date_time").orderDescending();
ObjectSet<LogMessage> result = query.execute();
long date_time = (result != null && result.size() > 0) ? result.get(0).getDate_time() : 0;
return date_time;
}
/**
* 保存一条消息到数据库
* @param msg
*/
public void saveMsg(LogMessage msg) {
if (db.ext().isClosed()) {
openDB4O(path);
}
db.store(msg);
db.commit();
}
/**
* 打开Db4o数据库
* @param path
*/
public void openDB4O(String path) {
File tempFile = new File(path);
String tempStr = tempFile.getAbsolutePath();
int index = tempStr.lastIndexOf(File.separatorChar);
if (index > 0) {
String path2 = tempStr.substring(0, tempStr.lastIndexOf(File.separatorChar));
File file = new File(path2);
if (!file.exists()) {
file.mkdirs();
}
}
db = Db4o.openFile(configuration, path);
}
public void closeDB4O() {
db.close();
}
public List<LogMessage> getAllMessage()
{
List<LogMessage> mymessage=null;
Query query = this.db.query();
query.constrain(LogMessage.class);
ObjectSet objset = query.execute();
mymessage = objset;
return mymessage;
}
public void save(String path,String perID,String remoteIP)
{
if (db.ext().isClosed()) {
openDB4O(path);
}
java.util.Date date = new java.util.Date();
java.text.SimpleDateFormat df = new java.text.SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String strDate = df.format(date); //当天日期
LogMessage lm = new LogMessage();
lm.setPerID(perID);
lm.setRemoteIP(remoteIP);
lm.setDate(strDate);
db.store(lm);
db.commit();
}
public static void main(String[] args) {
// }
}
发表评论
-
自定义注解之运行时注解(RetentionPolicy.RUNTIME)
2017-10-25 11:42 697对注解概念不了解的可以先看这个:Java注解基础概念总结 ... -
debug模式很慢的解决办法
2017-10-18 09:00 486今天照常使用MyEclipse 6.5 Blue Editi ... -
今天碰到项目中要做一个某一年月报表的页面的学习提高
2011-05-21 06:33 1012今天在项目中要做一个月报表,由于我采用的是ef 4.1的框架, ... -
预警系统
2010-12-16 15:28 1389根据公司需求,所编写的一个预警系统框架,将lib1.zip和l ... -
对quartz使用框架调度总结
2010-11-17 10:56 1779在项目中的使用需求: 1.可以使用一个A程序定期的去扫描配置 ... -
利用反射给JAVABEAN实例赋值
2010-11-15 22:08 1457package com.util; import java. ... -
logback 日志记录到数据库中
2010-11-10 11:04 6208<!--不采用连接池的配 ... -
logback 关于日志发送邮件配置总结
2010-11-10 09:40 4154<configuration debug="f ... -
sql server语句优化实例
2010-11-10 08:42 1495SQL语句优化有一个很重要的方法: 在Where中的条件表达 ... -
在新的项目中使用logback来作为日志记录系统
2010-11-09 16:19 4225Logback手册中文版文档版本:0.1发布日期:2010年4 ... -
Quartz 监听器的应用
2010-11-08 17:32 2356当我在项目中用到任务调用的时候,有必要在每次调用任务和任务出现 ... -
编写批处理命令来执行JAVA文件
2010-11-04 11:13 1852JAVA工程路径结构 Project ------l ... -
Quartz定时任务框架学习总结
2010-11-01 10:58 1289首先关于Quartz的一篇详细介绍的文章可以参考我博客中的一篇 ... -
mysql中采用concat来拼接中文字符乱码解决方式
2010-10-13 17:47 2377mysql concat乱码问题解决concat(str1,s ... -
WEB工程加入FLEX技术,遇到跨域的问题
2010-09-16 08:15 1587在我FLEX博客中有提到怎么将FLEX整合到JAVA的WEB工 ... -
关于Struts2中如何去取得ServletContext的方法
2010-09-16 08:07 2744在我的上一篇文章中说到,将DB4O的DAO类放入到Servel ... -
SVN服务器配置总结
2010-09-16 07:40 3404软件下载 服务器和客户端安装 建立版本库(Reposito ...
相关推荐
DB4o(Database for Objects)是一款开源的对象数据库系统,它允许开发者直接在内存中以对象的形式存储、查询和检索数据,无需转换为关系型数据库的表格形式。在本笔记中,我们将深入探讨DB4o的对象SQL基本操作,...
总结来说,"db4o-8.0-java" 是一个完整的db4o对象数据库解决方案,包含所有必要的组件,让Java开发者能够轻松地在自己的项目中实施对象数据库。源码、jar包、Eclipse插件和文档的提供,使得开发、调试和学习过程变得...
**对象数据库db4o详解** 对象数据库是一种新型的数据库管理系统,与传统的关系型数据库不同,它直接存储和管理对象,而不是将对象转换为表格...无论是学习还是实际开发,db4o都是一个值得探索的对象数据库解决方案。
**db4o 开发指南与实例详解** **一、db4o 简介** db4o(Database for Objects)是一款开源的对象关系数据库管理...通过学习上述知识点,开发者可以熟练掌握db4o的使用,从而在项目中实现高效、便捷的对象持久化管理。
通过深入学习DB4o的API和特性,你可以更好地利用这个工具来简化对象持久化的工作流程。 总结一下,DB4o是一个强大且灵活的对象数据库,它可以简化Java开发中的数据存储和检索。通过配置对象、打开数据库、存储和...
总结一下,db4o8.0的API是一个全面的对象数据库工具集,提供了丰富的功能来简化对象的持久化和查询。源码和核心jar文件的提供为开发者提供了深入学习和定制db4o的机会,使其能够在Android开发中发挥重要作用。通过...
开发者可以通过阅读这些文档,学习如何在自己的项目中正确地集成和使用db4o。 **目录结构**: 压缩包内的目录结构可能包含以下几个部分: 1. **lib**:这个目录下通常会有不同版本的db4o jar包,包括核心库、客户...
总结来说,面向Java开发人员的db4o指南是关于如何使用db4o这个对象数据库系统来高效、便捷地管理结构化对象和集合的教程。它涵盖了db4o的基本概念、API使用、查询语言、性能优化以及数据库的配置和管理等方面,旨在...
"黑金开发板DB4CE15原理图"是一份专为FPGA学习者设计的文档,它包含了关于黑金开发板核心板和底板的详细电路原理图。通过研究这些图纸,用户能够深入理解FPGA如何与各种硬件资源相互作用,从而提升其在FPGA设计和...
总结来说,"DAL.rar_DAL_employee attendance_java Attendance" 是一个使用Java技术和DB4O数据库构建的员工考勤及休假追踪系统的数据访问层项目。它涉及了对象数据库的概念,Java编程的面向对象特性,以及数据访问层...
- **对象存储**:如 db4o,直接使用面向对象的方式来存储和检索数据。 4. **MongoDB 特点**: - **面向集合存储**:数据以集合的形式组织,类似于 RDBMS 的表,但不需要预定义模式。 - **动态查询**:支持多种...
总结来说,"eu.roelbouwman-开源"是一个利用Java、Jetty、Ajax、Echo2和db4o技术的开源项目,旨在提供一个快速构建高效Web应用的解决方案。开发者可以通过这个项目学习到如何将这些技术集成到一起,创建出具有高度...
通过JPOX可以实现Java对象的透明持久化,支持市场上主要的关系数据库管理系统(RDBMS)以及DB4O对象数据存储。JPOX还能够满足现代应用程序所需的多种对象关系映射(ORM)模式,并支持JDOQL、SQL或JPQL等多种查询语言。 ...
2. **系统库和运行环境**:包括 OpenGL ES(用于 2D 和 3D 图形)、SQLite(关系型数据库)、db4o(对象数据库)和媒体库等。Google 使用 Apache Harmony 类库,支持全面开源的 Java 开发,同时 Dalvik 虚拟机运行...
《程序简单花样齐全的流水灯》是一篇关于利用单片机设计流水灯程序的文章,主要讲解如何通过硬件电路和C语言编程实现五种不同样式的流水灯效果。下面将详细阐述其中涉及的知识点。 首先,文章中提到的硬件电路设计...