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。
提前致谢。
答案 0 :(得分:2)
您需要做的是serialize并将java对象与Oracle数据库表反序列化。您可以使用BLOB列类型将序列化对象字节存储在Oracle表中。这是一个描述如何从表中存储和检索java对象的链接。
http://asktom.oracle.com/pls/apex/f?p=100:11:0::::p11_question_id:1285601748584
答案 1 :(得分:0)
您可以将数据库中的任何可序列化数据从文本文件存储到Java对象。这里的基本逻辑,任何数据都被序列化为字节流并存储在DB中。从DB获取时,它们被反序列化。如果你真的想要这个,你可以跳过我的答案。但是,将数据库字段映射到Java类是一个更好的解决方案,我的解释将朝这个方向发展。
为此,您应该使用对象关系映射(ORM)框架。它可以是Hibernate,JPA或Spring JDBC Template。其中一个可以根据您的要求使用。
如果您不想使用任何框架,您基本上可以实现它。
实现2个字段的结构,例如用户名和密码。我假设这两个字段都是String
首先,你应该有一个模型类,它将被映射到查询结果。
class Model
{
private String username;
private String password;
//setter and getters.
}
其次,您应该实现Factory模式以从查询结果创建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;
}
}