jdbc性能技巧
日期:2004/6/10 【相关文章:google 营销 (一)】
翻译:陈先波(turbochen@163.com) 【扩展阅读:跨服务器上传文件完美解决】
【扩展信息:Google 营销 (二)】阅读原文:http://www.theserverside.com/articles/article.tss?l=jdbcperformance_partiii
april 2004part i - 正确的使用数据库metadata方法
part ii - 获取需要的数据
part iii - 选用最佳性能的功能
介绍
john goodson 是一名jdbc专家组成员,也是datadirect technologies公司的副总裁.开发一个注重性能的jdbc应用程序不是一件容易的事. 当你的代码运行很慢的时候jdbc驱动程序并不会抛出异常告诉你.
本系列的性能提示将为改善jdbc应用程序的性能介绍一些基本的指导原则,这其中的原则已经被许多现有的jdbc应用程序编译运行并验证过。 这些指导原则包括:
正确的使用数据库metadata方法 只获取需要的数据 选用最佳性能的功能 管理连接与更新以下这些一般性原则可以帮助你解决一些公共的jdbc系统的性能问题.
选用jdbc对象与方法
本节的指导原则将帮助你在选用jdbc的对象与方法时哪些会有最好的性能.
在存储过程中使用参数标记作为参数
当调用存储过程时, 应总是使用参数标记(?)来代替字面上的参数. jdbc驱动能调用数据库的存储过程, 也能被其它的sql查询执行, 或者直接通过远程进程调用(rpc)的方式执行. 当你将存储过程作为一个sql查询执行时, 数据库要解析这个查询语句, 校验参数并将参数转换为正确的数据类型.
要记住, sql语句总是以字符串的形式送到数据库, 例如, “{call getcustname (12345)}”. 在这里, 即使程序中将参数作为整数赋给了getsustname, 而实现上参数还是以字符串的形式传给了服务器. 数据库会解析这个sql查询, 并且根据metadata来决定存储过程的参数类型, 然后分解出参数"12345", 然后在最终将存储过程作为一个sql查询执行之前将字串´12345’转换为整型数.
按rpc方式调用时, 之前那种sql字符串的方式要避免使用. 取而代之, jdbc驱动会构造一个网络packet, 其中包含了本地数据类型的参数,然后执行远程调用.
案例 1
在这个例子中, 存储过程不能最佳的使用rpc. 数据库必须将这作为一个普通的语言来进行解析,校验参数类型并将参数转换为正确的数据类型,最后才执行这个存储过程.
callablestatement cstmt = conn.preparecall ( "{call getcustname (12345)}"); resultset rs = cstmt.executequery ();案例 2
... 下一页