0

Oracle データベースは、Java ストアード・プロシージャー呼び出しの戻り値から Java オブジェクトを返すことができますか?

Java ストアド プロシージャを呼び出して Oracle データベースにクエリを実行し、結果として Java オブジェクトを受け取りたいと考えています。これは可能ですか?もしそうなら、誰かが非常に簡単な例を提示できますか?

注: シリアル化されたオブジェクトをデータベースに保存したくありません。Java ストアド プロシージャを実行し、このプロシージャに Java オブジェクトを返させたいと考えています。したがって、データベースが照会された場合、返される各レコードは Java オブジェクトになります。

例: Java ストアド プロシージャで、ネットワーク共有ドライブに格納されているバイナリ ファイルを解析し、バイナリ ファイルから抽出した情報を使用して Java オブジェクトを構築し、この Java オブジェクトをクエリ結果として返します。

私はこのようなことを達成したい:

 #Using Java or Python programming language
 results = execute( Select java_procedure_call(parameter) From dual);
 For java_obj in results:
     print java_obj.name
     print java_obj.city

その他の情報: 私は Java EE を使用していません。

前もって感謝します。

4

2 に答える 2

2

あなたがする必要があるのは、JavaオブジェクトをOracleデータベーステーブルとの間でシリアライズおよびデシリアライズすることです。BLOB列タイプを使用して、シリアル化されたオブジェクト バイトを Oracle テーブルに格納できます。これは、テーブルから Java オブジェクトを格納および取得する方法を説明するリンクです。

http://asktom.oracle.com/pls/apex/f?p=100:11:0::::p11_question_id:1285601748584

于 2013-07-14T16:57:18.423 に答える
0

テキスト ファイル、画像、Java オブジェクトなど、シリアライズ可能なデータをデータベースに格納できます。ここでの基本的なロジックでは、データはバイト ストリームにシリアル化され、DB に格納されます。DB からフェッチするときにデシリアライズされます。本当にこれが必要な場合は、私の答えをスキップできます。ただし、データベース フィールドを Java クラスにマッピングすることはより良い解決策であり、私の説明はこの方向になります。

この目的には、オブジェクト リレーショナル マッピング (ORM) フレームワークを使用する必要があります。HibernateJPAまたはSpring JDBC Templateにすることができます。要件に応じて、そのうちの 1 つを使用できます。

フレームワークを使用したくない場合は、基本的にそれを実装できます。

ユーザー名とパスワードなどの 2 つのフィールドの構造を実装します。私は両方のフィールドがString

まず、クエリ結果にマップされるモデル クラスが必要です。

class Model
{
     private String username;
     private String password;

    //setter and getters.
} 

次に、ファクトリ パターンを実装して、クエリ結果から Java オブジェクトを作成する必要があります。

class BasicModelFactory
{

   public List<Model> getModels(ResultSet rs)
   {
        List<Model> models = new ArrayList<Model>();
        while(rs.next())
        {
             Model m = new Model();
             m.setUsername(rs.getString("username");
             m.setPassword(rs.getString("password");
             models.add(m); 
        }
        return models;
   }

}
于 2013-07-14T16:58:40.567 に答える