关于oracle与mysql官方jdbc的一些区别
|
描述 |
mysql |
oracle |
jdbc驱动 |
|
驱动下载地址: http://dev.mysql.com/downloads/connector/j/
驱动类型:TYPE4
最新版都声称支持JDBC4.0
标准驱动注册名称:com.mysql.jdbc.Driver
用于主从读写分离驱动注册名称:com.mysql.jdbc.ReplicationDriver
|
驱动下载地址:
http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.html
驱动类型:TYPE2(oci),TYPE4(thin) 最新版都声称支持JDBC4.0
标准驱动注册名称: oracle.jdbc.OracleDriver 或 oracle.jdbc.driver.OracleDriver
|
jdbc url |
|
标准驱动URL如下: jdbc:mysql://host:port/dbname
ReplicationDriver的URL如下:
jdbc:mysql:replication://master,slave1,slave2/dbname
|
oci模式:需要客户端安装oracle的客户端,并且使用的jdbc驱动最好和客户端安装的版本相同,URL格式如下: jdbc:oracle:oci:@tnsname
jdbc:oracle:oci:@host:port:sid
thin模式:不需要安装oracle的客户端,URL格式如下:jdbc:oracle:thin:@host:port:sid
|
连接属性 |
|
可以在jdbc url中直接像http url一样用键值对指定连接属性,例如:
jdbc:mysql://127.0.0.1:3306/test?user=root&password=1234
|
只能通过properties配置属性 |
连接指定字符集 |
|
默认为服务器端字符编码,可以在连接中通过属性characterEncoding强制指定字符编码 |
不支持指定数据库字符集,默认为服务器端字符编码; jdbc 的数据编码与本地NLS_LANG环境变量无关; 对于一些如US7ASCII这种非国际化字符的数据库编码,存取中文需要做转码处理; 如果数据编码与数据库不同也需要做转码处理; 使用NVARCHAR2这种国际化字段类型不需要转码处理 |
batch |
批量处理DML操作,一般用于减少网络传输,有可能性能提升10倍以上。 |
支持,会返回每条SQL实际影响的行数,
mysql的batch默认只是语法支持,并不提高性能,需要在连接属性中指定rewriteBatchedStatements=true才能达到batch真真的效果: insert into values(...)将转换为insert into values(...),(...),...的SQL执行, update 和delete将转换为一个多条语句的SQL发送到服务器执行,期间会临时设置allowMultiQueries=true |
支持,不支持返回影响行数, 老版本的驱动当一个batch很大时有数据丢失的BUG |
客户端数据接收方式 |
|
默认为从服务器一次取出所有数据放在客户端内存中,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注入,目前版本对性能没有提升,详细说明见
http://blog.csdn.net/yzsind/article/details/7266281 |
支持 非常重要,不仅可防止SQL注入,还会大大送减少服务器CPU开销,提高性能 |
SQL执行超时设置 |
|
可通过PreparedStatement.setQueryTimeout(value)设置每条SQL的执行超时时间(5.0)
通过连接属性socketTimeout设置所有SQL的超时时间
|
可通过PreparedStatement.setQueryTimeout(value)设置每条SQL的执行超时时间
通过连接属性oracle.jdbc.ReadTimeout设置所有SQL的超时时间
|
一次执行多条SQL |
|
通过参数allowMultiQueries控制,默认不允许,当多条SQL时会返回多个结果集,可以用jdbc的getMoreResults方法处理,例:
stmt.executeQuery("select * from t1;select * from t2"); ResultSet rs1=stmt.getResultSet(); while (rs1.next()) { ... } if (stmt.getMoreResults()) {
ResultSet rs2=stmt.getResultSet();
while (rs2.next()) {
... }
}
|
不支持 |
负载均衡与故障切换 |
|
通过loadbalance相关的连接参数实现负载均衡(5.1) 使用ReplicationDriver实现读写分离,通过connection.setReadOnly实现master和slave请求自动处理,例如:
Class.forName("com.mysql.jdbc.ReplicationDriver").newInstance(); Connection conn = DriverManager.getConnection( "jdbc:mysql:replication://127.0.0.1,10.20.36.20/test", "yzs", "yzs"); conn.setReadOnly(true); ...//操作主库 conn.setReadOnly(false); ...//操作从库 conn.setReadOnly(true); ...//操作主库
详见: http://dev.mysql.com/doc/refman/5.6/en/connector-j-reference-replication-connection.html |
通过在连接url里指定多个服务器及切换参数配置 |
我的新浪微博:http://weibo.com/yzsind
分享到:
相关推荐
oracle mysql jdbc最新驱动包,经测试完全没有问题,可放心使用
Oracle+MySql JDBC demo,自己亲手写的,简单易懂
Oracle、Mysql和JDBC学习
各种主流数据库的jdbc,mysql,sql sever,oracle的jdbc
sqlserver2000_jdbc sqlserver2005_jdbc oracle_jdbc mysql_jdbc
jdbc(oracle,mysql) jdbc(oracle,mysql) jdbc(oracle,mysql)
JDBC连接工具mysql与oracle
众里寻他千百度,mysqljdbc.jar;oraclejdbc.jar却在CSDN处,欢迎下载!
本课程是关于Oracle、MySQL和JDBC数据库的培训课程。通过学习本课程,您将掌握Oracle和MySQL数据库的基本概念、SQL语言、数据库设计和管理等知识,并学会使用JDBC技术与Java程序进行数据库连接和操作。这将帮助您在...
这是一个包含了使用jdbc链接mysql和oracle数据库时所用到的核心jar包
Java写数据库项目必不可少的驱动 希望对大家有用,不会用的找我 嘿嘿,在此要一分。
mysql+oracle+sqlserver jdbc驱动包
本课程提供专业的数据库培训,深入解析Oracle和MySQL这两大主流关系型数据库管理系统。学员将学习数据库的基本概念、结构化查询语言(SQL)、以及数据库设计与管理的关键知识。从基础的数据表操作到复杂的事务处理和...
JDBC连接oracle和mysql的jar包。JDBC连接oracle和mysql的jar包。JDBC连接oracle和mysql的jar包。
分别有:数据源配置、数据表结构转换、字段更新、数据迁移、根据oracle SQL的UPDATE DELETE 事物执行记录转为Mysql可执行SQL,同步执行到MySql数据库,此项目为个人兴趣爱好练手项目,项目问题欢迎留言,共同进步...
jdbc驱动(内含oracle mysql驱动) 下载引入项目,可以直接使用,已经验证
把三个常用的数据库的jdbc驱动集合到一块,方便你学习、工作~~
java连接oracle、SQLServer、mySql的 jdbc jar包
MySql和Oracle的JDBC驱动, 开发JDBC应用时,必须的jar包
里面包括JDBC与mysql的驱动包和oracle的驱动包,我一直在用的