`

Jdbc执行很慢,而PLSQL执行快的问题解决

 
阅读更多

最近在检查一方法时发现程序执行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

 

分享到:
评论

相关推荐

    PLSQL快速执行批量的SQL文件

    当你在文件夹里有很多很多很多的SQL文件需要执行时候,一个一个复制路径文件名出来执行肯定很慢很烦。 而且你不关心他们的执行顺序的时候,这时我们可以简单的利用Dos把文件夹里所有SQL文件的路径与文件名统一导成一...

    JDBC性能优化.pdf

    - **问题**:在元数据方法中使用null参数会导致驱动程序执行额外查询,增加网络通信负担。 - **解决方案**:尽可能提供非空参数,如`getTables(String catalog, String schemaPattern, String tableNamePattern, ...

    使用plsql查看执行计划

    RBO依赖于预定义的规则来确定最佳执行路径,而CBO则是通过评估SQL语句的执行成本来选取最优方案。成本涉及到CPU和内存的消耗,这需要基于表和索引的统计信息来进行计算。当表和索引有准确的统计信息时,CBO通常能...

    plsql创建存储过程并创建job定时任务执行-详细笔记文档总结

    plsql创建存储过程并创建job定时任务执行详细笔记文档总结 在 Oracle 中,plsql 是一种强大的编程语言,可以用来创建存储过程和定时任务执行。在本文中,我们将详细介绍如何使用 plsql 创建存储过程并创建 job 定时...

    PLSQL隔断时间再执行sql的时候卡死未响应(要等很久才有结果)解决办法

    ### PLSQL隔断时间再执行SQL的时候卡死未响应(要等很久才有结果)解决办法 在使用PL/SQL Developer或其他Oracle数据库管理工具时,可能会遇到一个常见的问题:执行SQL语句或存储过程时,系统长时间无响应或者卡住...

    表提示不能执行,PLSQL Developer

    在使用PLSQL Developer工具进行数据库开发的过程中,可能会遇到“表提示不能执行”的问题。这通常是因为用户对某些表或视图没有足够的权限所导致的。...希望本文能帮助遇到类似问题的开发者解决问题。

    win10打开plsql后,输入法卡顿解决办法

    有时,开发者会在新版本的PLSQL更新中修复此类问题,因此确保PLSQL也是最新版本也很重要。 3. **备份原有文件**:在替换CnPlugin之前,最好先备份原有的CnInputPlug.dll文件,以防万一新版本不起作用或造成其他问题...

    oracle执行update语句时卡住问题分析及解决办法

    开发的时候debug到一条update的sql语句时程序就不动了,然后我就在plsql上试了一下,发现plsql一直在显示正在执行,等了好久也不出结果。但是奇怪的是执行其他的select语句却是可以执行的。 原因和解决方法 这种...

    PLSQL jdbc调用存储过程(入门)

    PLSQL jdbc调用存储过程(入门)

    PLSQL连接远程数据库问题

    PLSQL连接远程数据库问题 无法连接报错

    PLSQL安装包及解决PLSQL过期文件

    PL/SQL Developer是一个集成开发环境,专门面向Oracle数据库存储程序单元的开发。... 该安装包包含了解决PLSQL过期的文件,将PLSQL安装后将解决过期的文件放到安装包中,即可解决PLSQL过期的问题。即可永久使用。

    PLSQL经常自动断开解决

    当使用PL/SQL Developer连接到数据库并执行操作时,如果连接在没有明显原因的情况下中断,那么通过调整系统配置、优化网络参数和增强连接稳定性,可以有效避免这一问题。 ### 标签解析:“SQL断开解决” 标签...

    PLSQL程序优化和性能分析方法

    PLSQL程序优化是指在编写PLSQL程序时,为了提高程序的执行效率和性能所采取的一系列措施和技术。这些措施和技术可以帮助开发者编写高效、可靠、可维护的PLSQL程序,从而提高系统的整体性能和响应速度。 在编写PLSQL...

    PLSQL显示乱码、导出问题的解决方法

    ### PLSQL显示乱码、导出问题的解决方法 #### 一、ORACLE数据库显示乱码的问题 在处理Oracle数据库时,经常会遇到显示乱码的情况,尤其是在使用PL/SQL Developer等客户端工具时更为常见。此类问题通常是由于字符集...

    PLSQL导出CSV后中文乱码解决办法

    这个问题通常是由于编码格式不匹配导致的,下面我们将详细探讨如何解决PLSQL导出CSV后中文乱码的问题。 首先,我们需要了解CSV文件本身的特点。CSV是一种通用的、简单的数据交换格式,它使用逗号分隔每一列数据,以...

    PLSQL Developer无法连接64位Oracle的解决方法

    ### PLSQL Developer无法连接64位Oracle的解决方法 在IT行业中,开发人员经常会遇到工具与数据库兼容性问题,其中一个常见的问题是PLSQL Developer无法...希望本文能帮助遇到同样问题的读者解决问题,提高工作效率。

    plsql11汉化包

    "plsql11汉化包"正是为了解决这个问题,提供了一个方便的中文语言环境,让用户能够更加舒适地操作和理解PLSQL Developer的各项功能。 PLSQL Developer的汉化过程通常是通过安装汉化包来完成的。"plsql developer 11...

    plsql乱码解决办法

    要解决 PL/SQL 乱码问题,需要检查系统的注册表字符集设置。在 Windows 系统中,可以通过注册表编辑器(Regedit)来检查和修改注册表设置。 1. 打开注册表编辑器(Regedit),然后导航到 HKEY_LOCAL_MACHINE\...

    解决plsql dev无法在64bit中运行问题

    使用PL/SQL Developer连接OracleX64版本: •1. 下载32位Oracle InstantClient,并解压到某目录,注意次客户端不需要安装,例如G:\app\liu\product\instantclient112 •2....启动PLSQL Developer:

    PLSQL 中文乱码.docx

    但是,在执行 SQL 语句时,PLSQL 经常会出现中文乱码的问题,导致输出的中文标题显示成问号????。今天,我们将讨论这个问题的解决方案。 问题描述 在 PLSQL 中执行 SQL 语句时,如果语句中包含中文字符,输出的...

Global site tag (gtag.js) - Google Analytics