DBMNG数据库管理与应用

书籍是全世界的营养品。生活里没有书籍,就好像没有阳光;智慧里没有书籍,就好像鸟儿没有翅膀。
当前位置:首页 > 数据库基础 > DB4O

DB4O简单例子

import java.lang.reflect.InvocationTargetException;
import java.util.List;
import com.db4o.Db4o;
import com.db4o.ObjectContainer;
import com.db4o.ObjectSet;
import com.db4o.config.Configuration;
import com.db4o.query.Predicate;
/**
 * Db4o的功能类
 * 
 */
public class Db4oUtils {
 static {
  Db4oUtils.startConfigure();
 }
 /**
  * 打开数据存储库
  *
  * @param fileName
  *            数据存储文件名称
  * @return 返回对象容器
  */
 public static ObjectContainer open(String fileName) {
  ObjectContainer db = Db4o.openFile(fileName);
  return db;
 }
 /**
  * 关闭数据存储库
  *
  * @param 数据存储容器
  */
 public static boolean close(ObjectContainer db) {
  db.commit();
  return db.close();
 }
 /**
  * 启动db4o的自定义配置
  */
 public static void startConfigure() {
  Configuration conf = Db4o.configure();
  conf.blockSize(8);
 }
 /**
  * 根据条件获取ObjectSet,ObjectSet对对象采用延迟加载机制,若取业务对象请采用fetchObjectList()方法。
  *
  * @param 数据库文件路径
  * @param 判断谓词
  * @return 返回结果集(ObjectSet)
  */
 public static ObjectSet fetchObjectSet(String databasePath,
   com.db4o.query.Predicate predicate) {
  ObjectContainer db = Db4oUtils.open(databasePath);
  ObjectSet os = db.query(predicate);
  Db4oUtils.close(db);
  return os;
 }
 /**
  * 根据条件获取结果集
  *
  * @param 数据库文件路径
  * @param 判断谓词,如果不是谓词对象,获取该对象的所有实例
  * @return 返回结果集(List)
  */
 public static List fetchObjectList(String databasePath, Object obj) {
  java.util.List list = null;
  if (obj instanceof Predicate) {
   // 根据谓词判断取结果集
   ObjectContainer db = Db4oUtils.open(databasePath);
   ObjectSet os = db.query((Predicate) obj);
   list = Db4oUtils.convertObjectSet(os);
   Db4oUtils.close(db);
  } else {
   // 返回该对象的所有实例结果集
   ObjectContainer db = Db4oUtils.open(databasePath);
   ObjectSet os = db.query((Class) obj);
   list = Db4oUtils.convertObjectSet(os);
   Db4oUtils.close(db);
  }
  return list;
 }
 /**
  * 保存对象
  *
  * @param 数据库路径
  * @param 要保存的对象
  */
 public static void saveObject(String databasePath, Object obj) {
  ObjectContainer db = Db4oUtils.open(databasePath);
  db.set(obj);
  Db4oUtils.close(db);
 }
 /**
  * 更新某对象
  *
  * @param 数据库路径
  * @param 要更新的对象
  * @throws InvocationTargetException
  * @throws IllegalAccessException
  */
 public static void updateObject(String databasePath, Object oldObj,
   Object newObj) throws IllegalAccessException,
   InvocationTargetException {
  ObjectContainer db = Db4oUtils.open(databasePath);
  ObjectSet os = db.get(oldObj);
  Object tempObj = os.get(0);
  // 采用BeanUtils将新对象的属性拷贝过来进行覆盖即可,效率较高。
  // 只对属性更新,但若是关系对象不知道是否有漏洞。
  org.apache.commons.beanutils.BeanUtils.copyProperties(tempObj, newObj);
  db.set(tempObj);
  Db4oUtils.close(db);
 }
 /**
  * 删除某对象
  *
  * @param 数据库路径
  * @param 要删除的对象
  * @param 是否知道对象存在,对象已经查询过,知道其是存在的。
  *
  */
 public static void removeObject(String databasePath, Object obj) {
  if (obj == null) {
   System.out.println("要删除的对象为null,无法删除!!");
   return;
  }
  ObjectContainer db = Db4oUtils.open(databasePath);
  ObjectSet os = db.get(obj);
  if (os.isEmpty()) {
   System.out.println("删除的对象不存在,不用删除!!");
  } else {
   Object tempObj = os.get(0);
   db.delete(tempObj);
   System.out.println("删除该对象成功!!");
  }
  Db4oUtils.close(db);
 }
 /**
  * 将ObjestSet的对象存储到List中
  *
  * @param 结果集
  */
 public static List convertObjectSet(ObjectSet os) {
  java.util.List list = new java.util.ArrayList(os.size());
  while (os.hasNext()) {
   list.add(os.next());
  }
  return list;
 }
}
本站文章内容,部分来自于互联网,若侵犯了您的权益,请致邮件chuanghui423#sohu.com(请将#换为@)联系,我们会尽快核实后删除。
Copyright © 2006-2023 DBMNG.COM All Rights Reserved. Powered by DEVSOARTECH            豫ICP备11002312号-2

豫公网安备 41010502002439号