当前页面: 开发资料首页 → J2EE 专题 → 使用DB4O对象数据库进行简单持久化
摘要: 许多的Java程序都需要处理持久性数据,在大多数的情况下,需要和关系数据库打交道,可能是遗留数据库或是一个工业标准的数据库管理系统(DBMS)。JDBC 的API和驱动为大多数的数据库系统提供了一个使用SQL语言进行查询的标准方式,然而,在对象模型应用程序和关系模型的数据库的领域之间,“错误匹配问题”使得接口程序十分复杂。对象模型是基于软件工程的原理和业务领域的对象模型,而关系模型是基于数学原理和数据库有效存取规则。两种模型没有谁比谁更好,问题是两者是不同的,并不总能在程序中有效协调工作。
public class Player {
protected String name;
protected int squadNumber;
protected float battingAverage;
protected Team team;
public Player(String name, int squadNumber,
float battingAverage){
this.name = name;
this.squadNumber = squadNumber;
this.battingAverage = battingAverage;
}
public void setName(String n){this.name = n;}
public String getName(){return this.name;}
public void setSquadNumber(int s){this.squadNumber = s;}
public int getSquadNumber(){return this.squadNumber;}
public void setBattingAverage(final float b) {
this.battingAverage = b; }
public float getBattingAverage(){
return this.battingAverage;}
public void setTeam(Team t) {this.team = t;}
public Team getTeam() {return this.team;}
public String toString() {
return name + ":" + battingAverage;
}
} public class Pitcher extends Player{
private int wins;
public Pitcher(String name, int squadNumber,
float battingAverage, int wins) {
super(name,squadNumber,battingAverage);
this.wins = wins;
}
public void setWins(final int w){this.wins = w;}
public int getWins() {return this.wins;}
public String toString() {
return name + ":" + battingAverage + ", " + wins;
}
} import java.util.List;
import java.util.ArrayList;
public class Team {
private String name;
private String city;
private int won;
private int lost;
private List players;
public Team(String name, String city,
int won, int lost){
this.name = name;
this.city = city;
this.won = won;
this.lost = lost;
this.players = new ArrayList();
}
public void addPlayer(Player p) {
players.add(p);
}
public void setName(String n){this.name = n;}
public String getName(){return this.name;}
public void setStadium(String c){this.city = c;}
public String getCity(){return this.city;}
public void setPlayers(List p){players = p;}
public List getPlayers(){return players;}
public void setWon(int w) {this.won = w;}
public int getWon(){return this.won;}
public void setLost(int l) {this.lost = l;}
public int getLost() {return this.lost;}
public String toString() {
return name;
}
}
// Create Players
Player p1 = new Player("Barry Bonds", 25, 0.362f);
Player p2 = new Player("Marquis Grissom", 9, 0.279f);
Player p3 = new Player("Ray Durham", 5, 0.282f);
Player p4 = new Player("Adrian Beltre", 29, 0.334f);
Player p5 = new Player("Cesar Izturis", 3, 0.288f);
Player p6 = new Player("Shawn Green", 15, 0.266f);
// Create Pitchers
Player p7 = new Pitcher("Kirk Rueter",46, 0.131f, 9);
Player p8 = new Pitcher("Kazuhisa Ishii",17, 0.127f, 13);
// Create Teams
Team t1 = new Team("Giants", "San Francisco", 91, 71);
Team t2 = new Team("Dodgers", "Los Angeles", 93, 69);
// Add Players to Teams
t1.addPlayer(p1); p1.setTeam(t1);
t1.addPlayer(p2); p2.setTeam(t1);
t1.addPlayer(p3); p3.setTeam(t1);
t2.addPlayer(p4); p4.setTeam(t2);
t2.addPlayer(p5); p5.setTeam(t2);
t2.addPlayer(p6); p6.setTeam(t2);
// Add Pitchers to Teams
t1.addPlayer(p7); p7.setTeam(t1);
t2.addPlayer(p8); p8.setTeam(t2);
db.set(t1);
ObjectContainer db = Db4o.openFile(filename);
Player examplePlayer = new Player("Barry Bonds",0,0f);
ObjectSet result=db.get(examplePlayer);
System.out.println(result.size());
while(result.hasNext()) {
System.out.println(result.next());
} Player examplePlayer = new Player(null,0,0f);
ObjectSet result=db.get(examplePlayer);
System.out.println(result.size());
while(result.hasNext()) {
System.out.println(result.next());
}
Player examplePlayer = new Player("Shawn Green",0,0f);
ObjectSet result = db.get(examplePlayer);
Player p = (Player) result.next();
p.setBattingAverage(0.299f);
db.set(p); Player examplePlayer = new Player("Ray Durham",0,0f);
ObjectSet result = db.get(examplePlayer);
Player p = (Player) result.next();
db.delete(p); Query q = db.query();
q.constrain(Player.class);
q.descend("battingAverage").constrain(new Float(0.3f)).greater();
ObjectSet result = q.execute();
SELECT * FROM players WHERE battingAverage > 0.3
System.out.println(result.size());
while(result.hasNext()) {
// Print Player
Player p = (Player) result.next();
System.out.println(p);
// Getting Player also gets Team - print Team
Team t = p.getTeam();
System.out.println(t);
}
SELECT teams.name, players.name, players.battingAverage FROM teams, players
WHERE teams.teamID = players.playerID
AND battingAverage > 0.3
Query q = db.query();
q.constrain(Player.class);
q.descend("battingAverage").orderAscending();
ObjectSet result = q.execute();
Query q = db.query();
q.constrain(Player.class);
Constraint constr =
q.descend("battingAverage").constrain(
new Float(0.13f)).greater();
q.descend("wins").constrain(
new Integer(5)).greater().and(constr);
result = q.execute();
Query q = db.query();
q.constrain(Player.class);
Constraint constr =
q.descend("battingAverage").constrain(
new Float(0.3f)).greater();
q.descend("team").descend("won").constrain(
new Integer(92)).smaller().and(constr);
result = q.execute();