现在的位置: 首页 > 综合 > 正文

DB4O学习(二)查找、更新、删除

2012年11月17日 ⁄ 综合 ⁄ 共 3198字 ⁄ 字号 评论关闭

1.查询所有

db = Db4o.openFile("customer.yap");
//查询所有customer
Customer allcus=new Customer();
ObjectSet set=db.get(allcus);
while(set.hasNext()){
  System.out.println(((Customer)set.next()).getName());
 }

 

2.更新对象

db = Db4o.openFile("customer.yap");
ObjectSet set=db.get(new Customer("persia2"));
Customer c1=(Customer)set.next();
c1.setPhoneNumber("82839681");
db.set(c1);

 

注意:

   查询的操作将在内存中创建一个customer对象,然后通过ID与数据库中的对象来保持联系。

DB4O通过缓存OID作为一个若引用来保持联系。这个联系的维持将在数据库被关闭的时候停止。

   要更新一个数据库中的对象,必须确保内存中的是最新的版本,否则将保存另一个新对象:

确保您具有存储或检索对象在同一事务(即自最后的ObjectContainer打开) ,然后您的更新。

如果不是, db4o将假定这是一个新的 对象,而不是一个已储存以前。

 

重新实体中的toString方法:

	public String toString(){
		 return "[" + this.name + ";"+ this.phoneNumber + "]";
	}
就可以直接打印该对象了System.out.println(set.next());
 

3.删除对象

db = Db4o.openFile("customer.yap");
ObjectSet set=db.get(new Customer("persia2"));
Customer c1=(Customer)set.next();
db.delete(c1);

 

4.数据库配置

通过Db4o.configure().messageLevel(int level) 可以进行日志操作.

共有如下四级的日志选项:

0 No messages

1 Open and close messages

2 Messages for new, update, and delete

3 Messages for activate and deactivate

例如:

public class TestDelete {
	public static void main(String[] args) {
		Db4o.configure().messageLevel(2);
		ObjectContainer db = null;
		try{
	        db = Db4o.openFile("customer.yap");
	       
		    ObjectSet set=db.get(new Customer("customer12"));
			Customer c1=(Customer)set.next();
			db.delete(c1);
		}finally{
			
			if(db!=null){
				db.close();
			}
		}
	}

}

输出:

[db4o 6.4.54.11278   2009-02-18 22:57:04] 
 'customer.yap' opened O.K.
[db4o 6.4.54.11278   2009-02-18 22:57:04] 
 2817 delete com.firstdb4o.entity.Customer
[db4o 6.4.54.11278   2009-02-18 22:57:04] 
 'customer.yap' close request
[db4o 6.4.54.11278   2009-02-18 22:57:04] 
 'customer.yap' closed
 
5.一个完整的CURD例子:
package com.firstdb4o.test;

import java.io.File;

import com.db4o.Db4o;
import com.db4o.ObjectContainer;
import com.db4o.ObjectSet;
import com.firstdb4o.entity.Address;
import com.firstdb4o.entity.Customer;

public class CompleteExample {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		new File("customer.yap").delete();
		Db4o.configure().messageLevel(2);
		ObjectContainer db=Db4o.openFile("customer.yap");
		try{
		//新建
		  db.set(new Customer("customer1","phone1"));
		  db.set(new Customer("customer2","phone2"));
		  ObjectSet result=(ObjectSet)db.get(new Customer());
		  listResult(result);
		  
		 //更新
		  Customer c=new Customer();
		  c.setName("customer1");
		  ObjectSet r2=(ObjectSet)db.get(c);
		  Customer c1=(Customer)r2.next();
		  c1.setPhoneNumber("phone1modified");
		  r2.reset();
		  listResult(r2);
		  
		  //删除
		  db.delete(c1);
		  ObjectSet r3=(ObjectSet)db.get(new Customer());
		  listResult(r3);
		  
		}finally{
			
			if(db!=null){
				db.close();
			}
		}
	}

	private static void listResult(ObjectSet result) {
		while(result.hasNext()){
			System.out.println(result.next());
		}
		System.out.println("-----------------");
		
	}

}
控制台输出:
[db4o 6.4.54.11278   2009-02-18 23:16:25] 
 File not found: 'customer.yap' Creating new file
[db4o 6.4.54.11278   2009-02-18 23:16:26] 
 336 new com.db4o.ext.Db4oDatabase
[db4o 6.4.54.11278   2009-02-18 23:16:26] 
 'customer.yap' opened O.K.
[db4o 6.4.54.11278   2009-02-18 23:16:26] 
 173 new com.firstdb4o.entity.Customer
[db4o 6.4.54.11278   2009-02-18 23:16:26] 
 181 new com.firstdb4o.entity.Customer
[customer1;phone1]
[customer2;phone2]
-----------------
[customer1;phone1modified]
-----------------
[db4o 6.4.54.11278   2009-02-18 23:16:26] 
 173 delete com.firstdb4o.entity.Customer
[customer2;phone2]
-----------------
[db4o 6.4.54.11278   2009-02-18 23:16:26] 
 'customer.yap' close request
[db4o 6.4.54.11278   2009-02-18 23:16:26] 
 'customer.yap' closed

抱歉!评论已关闭.