java - 从数据库表中获取结果的更好选择

标签 java database jdbc plsql oracle10g

调用返回SYS_RECURSOR的过程是否有任何性能改进?或调用查询?

例如

CREATE OR REPLACE PROCEDURE my_proc
(
  p_id number,
  emp_cursor IN OUT SYS_REFCURSOR
)
AS
BEGIN

OPEN emp_cursor for
select * from emp where emp_number=p_id
end;
/

并从Java调用上面的内容通过注册OUT参数,传递IN参数并获取结果。

或者

来自 Javaemp 获取结果table通过

preparedStatement = prepareStatement(connection, "select * from emp where emp_number=?", values); 
resultSet = preparedStatement.executeQuery();

以上哪一个是从 Java 调用电话的更好选择?

最佳答案

假设您的 prepareStatement 方法对所有绑定(bind)变量使用适当的类型,则不会有性能差异。也就是说,您需要确保根据参数的数据类型调用 setLongsetDatesetString 等。如果您错误地绑定(bind)数据(即调用setString来绑定(bind)数值),您可能会强制Oracle进行数据类型转换,这可能会阻止优化器使用可以提高性能的索引。

但是,从代码组织和维护的角度来看,我宁愿在数据库中而不是在 Java 应用程序中进行查询。例如,如果您发现某个查询使用了糟糕的计划,那么如果该查询位于存储过程中,那么 DBA 解决该问题可能比该查询嵌入在 Java 应用程序中容易得多。如果查询存储在数据库中,您还可以使用数据库的依赖项跟踪功能更轻松地进行影响分析(如果您需要执行诸如确定 emp 表需要时会受到影响之类的操作)改变。

关于java - 从数据库表中获取结果的更好选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10971686/

相关文章:

Java 访问 token PKCS11 未找到提供程序

Java : reading all files

php - mySQL查询只获取显示

php - Yii2 $model->load(Yii::$app->request->post()) 不从表单加载数据

android - 使用 JDBC 从 android 中的 mySQL 检索多个数据

java apache poi(第 2 部分)

java - 如何将 MS Word HTML 文档转换为干净的 XHTML 内联样式?

java - 房间持久性 : Entities and Pojos must have a usable public constructor

java - 这个简单的字符串转义可以防止任何 SQL 注入(inject)吗?

java - oracle.sql.ArrayDescriptor.createDescriptor 中的 ClassCastException