最近在检查一方法时发现程序执行SQL查询时非常慢,但使用PLSQL DEV工具执行查询语句又很快。
看以下代码:
public boolean isExistSonoByStoreCode(String storeCode, String soNo, String billId) { StringBuffer sql = new StringBuffer(); sql.append("select bill_id, so_no from store_in_head where store_code = ? and UPPER(so_no) = UPPER(?) "); DBUtil dbu = null; PreparedStatement preStmt = null; ResultSet rs = null; boolean isExistSono = false; try { dbu = new DBUtil(); preStmt = dbu.getConnection().prepareStatement(sql.toString()); preStmt.setString(1, storeCode); preStmt.setString(2, soNo); rs = preStmt.executeQuery(); while (rs.next()) { String oldBillId = rs.getString("bill_id"); if (!oldBillId.equalsIgnoreCase(billId)) { isExistSono = true; } } } catch (Exception e) { log.error(e.getMessage(),e); } finally { try { rs.close(); } catch (Exception e) { ; } try { preStmt.close(); } catch (Exception e) { ; } closeDButil(dbu); } return isExistSono; }
经DEBUG发现速度慢确实发生在查询时,即执行rs = preStmt.executeQuery();时
一开始怀疑是语句使用UPER函数导致的,但是把语句修改为不使用函数也一样慢。。怀疑是使用了PreparedStatement 参数需要动态绑定问题,于是将PreparedStatement 改为Statement ,执行却很快,修改后的代码如下:
public boolean isExistSonoByStoreCode(String storeCode, String soNo, String billId) { StringBuffer sql = new StringBuffer(); sql.append("select bill_id, so_no from store_in_head where store_code = '" + storeCode + "' and UPPER(so_no) = UPPER('"+ soNo +"') "); DBUtil dbu = null; Statement preStmt = null; ResultSet rs = null; boolean isExistSono = false; try { dbu = new DBUtil(); preStmt = dbu.getConnection().createStatement(); rs = preStmt.executeQuery(sql.toString()); // preStmt.setString(1, storeCode); // preStmt.setString(2, soNo); // rs = preStmt.executeQuery(); while (rs.next()) { String oldBillId = rs.getString("bill_id"); if (!oldBillId.equalsIgnoreCase(billId)) { isExistSono = true; } } } catch (Exception e) { log.error(e.getMessage(),e); } finally { try { rs.close(); } catch (Exception e) { ; } try { preStmt.close(); } catch (Exception e) { ; } closeDButil(dbu); } return isExistSono; }
字段类型:STORE_CODE CHAR(3),SO_NO VARCHAR2(100)
类似问题:http://bbs.csdn.net/topics/320181076
相关推荐
当你在文件夹里有很多很多很多的SQL文件需要执行时候,一个一个复制路径文件名出来执行肯定很慢很烦。 而且你不关心他们的执行顺序的时候,这时我们可以简单的利用Dos把文件夹里所有SQL文件的路径与文件名统一导成一...
- **问题**:在元数据方法中使用null参数会导致驱动程序执行额外查询,增加网络通信负担。 - **解决方案**:尽可能提供非空参数,如`getTables(String catalog, String schemaPattern, String tableNamePattern, ...
### PLSQL隔断时间再执行SQL的时候卡死未响应(要等很久才有结果)解决办法 在使用PL/SQL Developer或其他Oracle数据库管理工具时,可能会遇到一个常见的问题:执行SQL语句或存储过程时,系统长时间无响应或者卡住...
RBO依赖于预定义的规则来确定最佳执行路径,而CBO则是通过评估SQL语句的执行成本来选取最优方案。成本涉及到CPU和内存的消耗,这需要基于表和索引的统计信息来进行计算。当表和索引有准确的统计信息时,CBO通常能...
plsql创建存储过程并创建job定时任务执行详细笔记文档总结 在 Oracle 中,plsql 是一种强大的编程语言,可以用来创建存储过程和定时任务执行。在本文中,我们将详细介绍如何使用 plsql 创建存储过程并创建 job 定时...
在使用PLSQL Developer工具进行数据库开发的过程中,可能会遇到“表提示不能执行”的问题。这通常是因为用户对某些表或视图没有足够的权限所导致的。...希望本文能帮助遇到类似问题的开发者解决问题。
有时,开发者会在新版本的PLSQL更新中修复此类问题,因此确保PLSQL也是最新版本也很重要。 3. **备份原有文件**:在替换CnPlugin之前,最好先备份原有的CnInputPlug.dll文件,以防万一新版本不起作用或造成其他问题...
开发的时候debug到一条update的sql语句时程序就不动了,然后我就在plsql上试了一下,发现plsql一直在显示正在执行,等了好久也不出结果。但是奇怪的是执行其他的select语句却是可以执行的。 原因和解决方法 这种...
PLSQL jdbc调用存储过程(入门)
当使用PL/SQL Developer连接到数据库并执行操作时,如果连接在没有明显原因的情况下中断,那么通过调整系统配置、优化网络参数和增强连接稳定性,可以有效避免这一问题。 ### 标签解析:“SQL断开解决” 标签...
PLSQL连接远程数据库问题 无法连接报错
PL/SQL Developer是一个集成开发环境,专门面向Oracle数据库存储程序单元的开发。... 该安装包包含了解决PLSQL过期的文件,将PLSQL安装后将解决过期的文件放到安装包中,即可解决PLSQL过期的问题。即可永久使用。
PLSQL程序优化是指在编写PLSQL程序时,为了提高程序的执行效率和性能所采取的一系列措施和技术。这些措施和技术可以帮助开发者编写高效、可靠、可维护的PLSQL程序,从而提高系统的整体性能和响应速度。 在编写PLSQL...
### PLSQL显示乱码、导出问题的解决方法 #### 一、ORACLE数据库显示乱码的问题 在处理Oracle数据库时,经常会遇到显示乱码的情况,尤其是在使用PL/SQL Developer等客户端工具时更为常见。此类问题通常是由于字符集...
这个问题通常是由于编码格式不匹配导致的,下面我们将详细探讨如何解决PLSQL导出CSV后中文乱码的问题。 首先,我们需要了解CSV文件本身的特点。CSV是一种通用的、简单的数据交换格式,它使用逗号分隔每一列数据,以...
### PLSQL Developer无法连接64位Oracle的解决方法 在IT行业中,开发人员经常会遇到工具与数据库兼容性问题,其中一个常见的问题是PLSQL Developer无法...希望本文能帮助遇到同样问题的读者解决问题,提高工作效率。
"plsql11汉化包"正是为了解决这个问题,提供了一个方便的中文语言环境,让用户能够更加舒适地操作和理解PLSQL Developer的各项功能。 PLSQL Developer的汉化过程通常是通过安装汉化包来完成的。"plsql developer 11...
要解决 PL/SQL 乱码问题,需要检查系统的注册表字符集设置。在 Windows 系统中,可以通过注册表编辑器(Regedit)来检查和修改注册表设置。 1. 打开注册表编辑器(Regedit),然后导航到 HKEY_LOCAL_MACHINE\...
使用PL/SQL Developer连接OracleX64版本: •1. 下载32位Oracle InstantClient,并解压到某目录,注意次客户端不需要安装,例如G:\app\liu\product\instantclient112 •2....启动PLSQL Developer:
但是,在执行 SQL 语句时,PLSQL 经常会出现中文乱码的问题,导致输出的中文标题显示成问号????。今天,我们将讨论这个问题的解决方案。 问题描述 在 PLSQL 中执行 SQL 语句时,如果语句中包含中文字符,输出的...