关于oracle与mysql官方jdbc的一些区别
| 描述 | mysql | oracle |
jdbc驱动 |
| 驱动下载地址: 最新版都声称支持JDBC4.0 标准驱动注册名称:com.mysql.jdbc.Driver 用于主从读写分离驱动注册名称:com.mysql.jdbc.ReplicationDriver | 驱动下载地址: http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.html |
jdbc url |
| 标准驱动URL如下: ReplicationDriver的URL如下: jdbc:mysql:replication://master,slave1,slave2/dbname | oci模式:需要客户端安装oracle的客户端,并且使用的jdbc驱动最好和客户端安装的版本相同,URL格式如下: jdbc:oracle:oci:@host:port:sid |
连接属性 |
| 可以在jdbc url中直接像http url一样用键值对指定连接属性,例如: jdbc:mysql://127.0.0.1:3306/test?user=root&password=1234 | 只能通过properties配置属性 |
连接指定字符集 |
| 默认为服务器端字符编码,可以在连接中通过属性 characterEncoding强制指定字符编码 | 不支持指定数据库字符集,默认为服务器端字符编码; |
batch | 批量处理DML操作,一般用于减少网络传输,有可能性能提升10倍以上。 | 支持,会返回每条SQL实际影响的行数, | 支持,不支持返回影响行数, |
客户端数据接收方式 |
| 默认为从服务器一次取出所有数据放在客户端内存中,fetch size参数不起作用,当一条SQL返回数据量较大时可能会出现JVM OOM。 要一条SQL从服务器读取大量数据,不发生JVM OOM,可以采用以下方法之一: 1、当statement设置以下属性时,采用的是流数据接收方式,每次只从服务器接收部份数据,直到所有数据处理完毕,不会发生JVM OOM。 setResultSetType(ResultSet.TYPE_FORWARD_ONLY); setFetchSize(Integer.MIN_VALUE); 2、调用statement的enableStreamingResults方法,实际上enableStreamingResults方法内部封装的就是第1种方式。 3、设置连接属性useCursorFetch=true (5.0版驱动开始支持),statement以TYPE_FORWARD_ONLY打开,再设置fetch size参数,表示采用服务器端游标,每次从服务器取fetch_size条数据,注意这种方式会大量占用服务器的临时空间,一般比较少用。 | 支持,默认为从服务器一次取出fetch size 条记录放在客户端,客户端处理完成一个批次后再向服务器取下一个批次,直到所有数据处理完成,当需要处理大量数据时,ResultSetType应设置为TYPE_FORWARD_ONLY,否则可能会出现JVM OOM。 |
PreparedStatement | 预处理SQL | 支持 | 支持 |
SQL执行超时设置 |
| 可通过PreparedStatement.setQueryTimeout(value)设置每条SQL的执行超时时间(5.0) 通过连接属性socketTimeout设置所有SQL的超时时间 | 可通过PreparedStatement.setQueryTimeout(value)设置每条SQL的执行超时时间 通过连接属性oracle.jdbc.ReadTimeout设置所有SQL的超时时间 |
一次执行多条SQL |
| 通过参数allowMultiQueries控制,默认不允许,当多条SQL时会返回多个结果集,可以用jdbc的getMoreResults方法处理,例: ResultSet rs2=stmt.getResultSet(); while (rs2.next()) { ... } } | 不支持 |
负载均衡与故障切换 |
| 通过loadbalance相关的连接参数实现负载均衡(5.1) | 通过在连接url里指定多个服务器及切换参数配置 |