Oracle JDBC如何配置defaultRowPrefetch参数解决连接URL格式错误问题
Error trying to connect to 'jdbc:oracle:thin:@atukwos57:1521/LIVE;defaultRowPrefetch=10000':Invalid connection string format, a valid format is: "host:port:sid"
报错核心原因是Oracle 11g版本的JDBC瘦驱动不支持直接用分号将参数拼接在服务名后的URL写法,参数拼接格式不符合规范才会触发格式校验错误。
你可以任选以下一种方式配置defaultRowPrefetch参数,三种方式兼容性从高到低排列:
1. 用Properties对象传参(最稳妥,兼容性最高)
不需要修改原有连接URL,在建立连接时将参数放入Properties对象中传入即可,代码示例如下:
import java.sql.Connection; import java.sql.DriverManager; import java.util.Properties; public class OracleConnTest { public static void main(String[] args) throws Exception { String url = "jdbc:oracle:thin:@atukwos57:1521/LIVE"; Properties props = new Properties(); // 基础连接参数 props.setProperty("user", "你的数据库用户名"); props.setProperty("password", "你的数据库密码"); // 配置行预取参数 props.setProperty("defaultRowPrefetch", "10000"); // 建立连接 Connection conn = DriverManager.getConnection(url, props); } }
如果使用连接池(比如HikariCP、Druid等),可以在连接池的配置项中添加connectionProperties参数,值设为defaultRowPrefetch=10000即可。
2. 调整URL参数拼接格式
如果要直接将参数写在URL中,需要将参数拼接前缀改为?,修改后的URL如下:jdbc:oracle:thin:@//atukwos57:1521/LIVE?defaultRowPrefetch=10000
注意需要在主机地址前添加//标识使用服务名连接模式,才能用?拼接参数。
3. 使用TNS样式的完整URL
你也可以写成TNS格式的完整连接串,将参数直接嵌入连接配置中:jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=atukwos57)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=LIVE))(defaultRowPrefetch=10000))
- Oracle 11g JDBC驱动默认行预取值为10,你设置为10000后会大幅提升大结果集查询的性能,但同时会增加JVM的内存占用,建议根据实际业务的单查询返回数据量、字段大小合理调整,避免设置过大导致内存溢出。
内容的提问来源于stack exchange,提问作者Blind Spectator

