Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 了解Oracle JDBC驱动程序中的defaultRowPrefetch和defaultBatchValue_Java_Oracle_Jdbc - Fatal编程技术网

Java 了解Oracle JDBC驱动程序中的defaultRowPrefetch和defaultBatchValue

Java 了解Oracle JDBC驱动程序中的defaultRowPrefetch和defaultBatchValue,java,oracle,jdbc,Java,Oracle,Jdbc,我已在连接对象中将defaultRowPrefetch设置为40,将defaultBatchValue设置为15。现在,我运行一个“single”查询,它应该返回一个“single”行 // define database user/password String dbUser = "mp"; String dbPassword = "mp2"; String dbURL = "jdbc:oracle:thin:@myserver:1521:scorpian"; // specify the P

我已在连接对象中将defaultRowPrefetch设置为40,将defaultBatchValue设置为15。现在,我运行一个“single”查询,它应该返回一个“single”行

// define database user/password
String dbUser = "mp";
String dbPassword = "mp2";
String dbURL = "jdbc:oracle:thin:@myserver:1521:scorpian";
// specify the Properties object
Properties props = new Properties();
props.put("user", dbUser);
props.put("password", dbPassword);
props.put("defaultRowPrefetch","40");
props.put("defaultBatchValue","15");

驱动程序会等到有15个查询时才运行还是立即运行我的查询?另外,由于我的查询必须只返回一行,那么defaultRowPrefetch大小是如何显示的。

defaultBatchValue在DML批处理上下文中使用的。因为您讨论的是返回行的查询,所以我猜您根本没有进行JDBC DML批处理,所以这个属性不相关。与此相关的是defaultRowPrefetch,它告诉Oracle驱动程序获取40乘40的行(而不是默认值10)。考虑到您只关心第一行,您可以将该值设置为1。

JDBC本身中没有这种情况。您是在专门谈论Oracle JDBC驱动程序吗?如果是这样,请用代码说明。@MarkRotterVeel我提到JDBC作为底层,可以是任何驱动程序。我不想让答案和任何司机的名字联系在一起。如果evry司机的行为与我的问题不同,请告诉我。在这种情况下,请考虑Oracle JDBC类型4驱动程序。这是一个驱动程序特定的事情,其他JDBC驱动程序没有属性称为“代码> Debug ToRePrExpCH < /Cult>或<代码> Debug tBuCHValue,因此您的问题与Oracle驱动程序紧密耦合,不能作为一个整体推广到JDBC。上面的例子是一个自定义场景,只是为了解释我的疑问。我理解了
defaultBatchValue
部分。但是我仍然没有得到
defaultRowPrefetch
。我不想改变它的值。让它成为40。现在发生了什么?只返回一行吗?剩下的39行呢?司机将取40乘40的行。调用ResultSet.next()将遍历这些行。如果查询只返回一行,那么将defaultRowPrefetch设置为1或40不会有任何区别。通常,只有在通过WAN获取大量行时才使用此参数,以减少往返次数。因此,在我的场景中,其余39行甚至不存在?