ObjectDB-Javaアプリケーション用のデータベース管理システム

ObjectDBはJava DBMSで記述されたオブジェクト指向で、HPやNovellなどの組織がすべての印象的な速度テストで使用し(公式Webサイトの広告から次のように) 、多くのプログラマーに馴染みがありませ私自身はこのデータベースについて1か月前に学びました、トレーニングプロジェクトの一環として1回だけ使用し、私のプロジェクトから教師がそれを知りました )。 継続のために、猫をお願いします。





まず 、ObjectDBは商用DBMSでありオブジェクトレコードの数が1,000,000ユニットを超え、クラスの数がデータベースファイルごとに10ユニットである場合、その使用に対して支払わなければならないという不快なニュースがあります。つまり、1つのファイルに格納できますライセンスを取得せずに10種類のクラスの最大100万個のオブジェクト(商用利用を含む)。



物理的な制限:



気持ちのいいものについて:

主な機能と主な機能:

接続管理、データベース回復、いくつかのキャッシングメカニズム、単純および複合インデックス、JPQLおよびJDOQLのサポートなど、その他の多くのkunshtuki。



名前が示すように、ObjectDBはオブジェクトを処理します。つまり、テーブル自体ではなく、Javaオブジェクト全体、データベース内のオブジェクトに対するアクションは、おなじみのCRUD操作によって実行されます。 ストレージに使用できるオブジェクトのタイプの完全なリストは、公式Webサイトで見つけることができます。



仕組み:


ユーザーデータを格納するための非常に単純なデータベースの例として、DBMSの使用を検討してください。

動作させるには、ユーザーを表すクラスとその上で操作を実行するクラスの2つのクラスを作成する必要があります。



クラスuser.java
このクラスはデータベースに保存されます。



 package db; import java.io.Serializable; import javax.jdo.annotations.Unique; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @Entity public class User { @Id @GeneratedValue(strategy=GenerationType.AUTO) private Long id; public User() { } public User(String name, String pass) { this.name = name; this.pass = pass; } public Long getId() { return id; } @Unique private String name; private String pass; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPass() { return pass; } public void setPass(String pass) { this.pass = pass; } }
      
      









package db; import java.io.Serializable; import javax.jdo.annotations.Unique; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @Entity public class User { @Id @GeneratedValue(strategy=GenerationType.AUTO) private Long id; public User() { } public User(String name, String pass) { this.name = name; this.pass = pass; } public Long getId() { return id; } @Unique private String name; private String pass; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPass() { return pass; } public void setPass(String pass) { this.pass = pass; } }













このクラスは、データベース要素として実際に使用できるようにするいくつかの注釈を除いて、非常によく知られているJava Beanです。



@Entity





@Entityアノテーションは、クラスがデータベース内のデータストレージ要素として使用されることを示します。

@Id @GeneratedValue(strategy=GenerationType.AUTO)

private Long id;






@Idアノテーションはid要素を主キーとしてマークし、@ GeneratedValue(strategy = GenerationType.AUTO)はその値を生成する方法を定義します。 GenerationType.AUTOは、キー値が明示的に指定されていない場合、自動的に作成されることも意味します。

@Unique private String name;



アノテーション@Uniqueは、一意の値を持たなければならないフィールドをマークします;このアノテーションでマークされたフィールドの値が以前に記録されたオブジェクトと一致するオブジェクトをデータベースに書き込もうとすると、DBMSは例外をスローします。 したがって、複数のユーザーを同じ名前で登録することはできません。



クラスUserDBAdapter.java
このクラスは、ユーザーデータベースで操作を実行します。

 package db; import javax.persistence.*; public class UserDBAdapter { EntityManagerFactory emf; EntityManager em; public UserDBAdapter() { emf = Persistence.createEntityManagerFactory("$objectdb/db/usr.odb"); em = emf.createEntityManager(); } @Override protected void finalize(){ em.close(); emf.close(); } public boolean persistUser(User u) { try { em.getTransaction().begin(); em.persist(u); em.getTransaction().commit(); em.clear(); return true; } catch(PersistenceException e){ System.out.println(e.getMessage()); em.clear(); em.close(); emf.close(); return false; } } public User getUserById(long id) { User u1 = em.find(User.class, id); return u1; } public User getUserByName(String name) { TypedQuery q = em.createQuery("SELECT u FROM User u WHERE u.name = :name", User.class); User u1 = (User) q.setParameter("name", name).getSingleResult(); return u1; } public boolean autentificate(String name, String pass) throws PersistenceException{ TypedQuery q = em.createQuery("SELECT u FROM User u WHERE u.name = :name AND u.pass = :pass", User.class); try { User u1 = (User)q.setParameter("name", name).setParameter("pass", pass).getSingleResult(); return true; } catch(PersistenceException e) { em.clear(); em.close(); emf.close(); throw new PersistenceException("username not found or password is invalid"); } } }
      
      









package db; import javax.persistence.*; public class UserDBAdapter { EntityManagerFactory emf; EntityManager em; public UserDBAdapter() { emf = Persistence.createEntityManagerFactory("$objectdb/db/usr.odb"); em = emf.createEntityManager(); } @Override protected void finalize(){ em.close(); emf.close(); } public boolean persistUser(User u) { try { em.getTransaction().begin(); em.persist(u); em.getTransaction().commit(); em.clear(); return true; } catch(PersistenceException e){ System.out.println(e.getMessage()); em.clear(); em.close(); emf.close(); return false; } } public User getUserById(long id) { User u1 = em.find(User.class, id); return u1; } public User getUserByName(String name) { TypedQuery q = em.createQuery("SELECT u FROM User u WHERE u.name = :name", User.class); User u1 = (User) q.setParameter("name", name).getSingleResult(); return u1; } public boolean autentificate(String name, String pass) throws PersistenceException{ TypedQuery q = em.createQuery("SELECT u FROM User u WHERE u.name = :name AND u.pass = :pass", User.class); try { User u1 = (User)q.setParameter("name", name).setParameter("pass", pass).getSingleResult(); return true; } catch(PersistenceException e) { em.clear(); em.close(); emf.close(); throw new PersistenceException("username not found or password is invalid"); } } }













データベースへの接続はクラスコンストラクターで作成されます( データベースファイルが見つからない場合は作成されます )。



public boolean persistUser(User u)



メソッドは、データベースに新しいユーザーを追加するために使用されます。 データベース内のオブジェクトの状態を変更する操作(新しいオブジェクトの追加などem.getTransaction().begin()



は、 em.getTransaction().begin()



メソッドでem.getTransaction().commit()



em.getTransaction().commit()



メソッドで閉じるトランザクション内で実行する必要がありますem.getTransaction().commit()



オブジェクトが物理的に保存されるときデータベース内 )。

データベースからの読み取り操作など、データベースの状態を変更しないメソッドは、アクティブなトランザクションを必要としません。



データベースからオブジェクトを取得するために、SQLのようなJPQLが使用されています。

public User getUserByName(String name)



およびpublic boolean autentificate(String name, String pass)





または、EntityManagerクラスの組み込みメソッドem.find(User.class, id)



など)。これにより、ここでそのプライマリキー(id)によってUserクラスのオブジェクトを検索できます。



これはObjectDBを使用する非常に単純な例であり、そのすべての機能を反映しているわけではありませんが、このDBMSを初めて知っている人には役立つと思います。

詳細情報とチュートリアルは、プロジェクトの公式Webサイトで入手できます。



All Articles