Question

Taking too much time to display records from db?is it because i use vector ?

Asked by: NASEEMA

hi all,
      it took too much long time to display the records fetching from oracle DB.
      No idea where i am wrong. is it sow is because i use vector or do i have any problem in my code.?


Wating for an expert comment

COrders pendingOrders = null;
Vector pOrders=new Vector();
 
 
 
String id="";
id=session.getAttribute("ID").toString();
 
 
//Creating instance of the Java Class
pendingOrders=new COrders();
pOrders=new Vector();
pOrders=pendingOrders.getPendingOrders(id);
 
 
  <%for (Iterator iter = pOrders.iterator(); iter.hasNext();)
          {
	       
                pendingOrders=(COrders) iter.next();
                if (pendingOrders !=null)
        	    {
   		     <td    align='center' ><font face='Arial' size="1">
                                                 <%=(pendingOrders.getOrd_no()== null? 
"":pendingOrders.getOrd_no())%></td>
	     <td   align='center' ><font face='Arial' size="1">
                           <%=(pendingOrders.getOrd_dt()== null? "":pendingOrders.getOrd_dt())%></td>
	     <td   colspan="2" align='center' ><font face='Arial' size="1">
                          <%=(pendingOrders.getOrd_rec_dt()== null? "":pendingOrders.getOrd_rec_dt())%></font></td>	     
	....etc displaying more columns like above.
 
<%}%>
 
<%}%>
 
 
<!------ Java Class --->
package com.mycompany.myclass;
import java.util.Iterator;
import java.util.Vector;
 
 
public class COrders {
	private String ord_dt="";
	private String ord_no="";
	private String ord_rec_dt="";
		 * @return
		 */
		public String getOrd_dt() 
		{
			return ord_dt;
		}
 
		/**
		 * @return
		 */
		public String getOrd_no() 
		{
			return ord_no;
		}
 
		/**
		 * @return
		 */
		public String getOrd_rec_dt() 
		{
			return ord_rec_dt;
		}
 
		
 
		
		/**
		 * @param string
		 */
		public void setOrd_dt(String string) 
		{
			ord_dt = string;
		}
 
		/**
		 * @param string
		 */
		public void setOrd_no(String string) 
		{
			ord_no = string;
		}
 
		/**
		 * @param string
		 */
		public void setOrd_rec_dt(String string) 
		{
			ord_rec_dt = string;
		}
 
	
 
	
		public Vector getPendingOrders(String id) {
			Vector vRow = new Vector();
			Vector pendingOrders=new Vector();
		  COrders pendingOrderInfo = null;
								 			
					 String sql="SELECT " 
								+"tpr_req_id ord_no, " 
								+"to_char(req_open_dt,'dd-mm-yyyy') ord_dt, "
								+"to_char(visit_date,'dd-mm-yyyy')  ord_rec_dt,"
								+" FROM  tablename "
								+" WHERE id="+id;			
				
          
					vRow = SQLManager.select(sql);
					String element;
				
					for (Iterator iter = vRow.iterator(); iter.hasNext();) {
							pendingOrderInfo = new COrders();
							element = (String)iter.next();
							pendingOrderInfo.setOrd_no((element == null ? "" : element));
							element = (String)iter.next();
							pendingOrderInfo.setOrd_dt((element == null ? "" : element));
							element = (String)iter.next();
							pendingOrderInfo.setOrd_rec_dt((element == null ? "" : element));
							pendingOrders.add(pendingOrderInfo);
							}	
					return pendingOrders;
					
				}
		
					
 
 
}

                                  
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:

Select allOpen in new window

This Question has been solved and asker verified All Experts Exchange premium technology solutions are available to subscription members.

Subscribe now for full access to Experts Exchange and get

Instant Access to this Solution

  • Plus...
  • 30 Day FREE access, no risk, no obligation
  • Collaborate with the world's top tech experts
  • Unlimited access to our exclusive solution database
  • Never be left without tech help again

Subscribe Now

Asked On
2009-07-02 at 15:06:25ID24541070
Tags

JSP

Topic

Java Server Pages (JSP)

Participating Experts
1
Points
500
Comments
18

Trusted by hundreds of thousands everyday for fast, accurate and reliable tech support.

  • "The time we save is the biggest benefit of Experts Exchange to Warner Bros. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange." Mike Kapnisakis, Warner Bros.
  • "Our team likes having a resource that is more secure than just using Google and most experts using this service really know their stuff. It's nice to look here first versus using Google." Dayna Sellner, Lockheed Martin
  • "Anytime that I've been stumped with a problem, 9 out of 10 times Experts Exchange has either the accepted solution or an open discussion of the potential solution to the problem." Kenny Red, eBay Inc.

See what Experts Exchange can do for you.

Got a question?

We've got the answer.

Experts Exchange has been collecting answers to technology questions since 1996…3 million and counting! If you have a question, chances are we already have your answer.

Screenshot of Experts Exchange Knowledgebase

Need individual assistance?

Our experts are ready to help.

If you can't find the exact answer you're looking for, ask our exclusive community of 50,000 experts. You’ll get a personalized answer from a trusted professional.

Screenshot of Experts Exchange Knowledgebase

Want to learn from the best?

Read articles from industry experts.

Thousands of free tech tips, tricks, how-to’s and tutorials are available in our peer reviewed articles section. See for yourself how smart our experts are, no login required.

Screenshot of an Article

Working on a long term project?

Store your work and research.

Save solutions to your questions, answers you’ve discovered through searching plus helpful articles in your personal knowledgebase for easy future access.

Screenshot of Experts Exchange Knowledgebase

Access the answers to your technology questions today.

Subscribe Now

30-day free trial. Register in 60 seconds.

What Makes Experts Exchange Unique?

Members of the expert community talk about why the experience at Experts Exchange is different than what you will find anywhere else.

Trusted by the world's most respected brands.

image of each brand's logo

Faithfully serving IT professionals since 1996.

Experts Exchange Logo

Try it out and discover for yourself.

Subscribe Now

30-day free trial. Register in 60 seconds.

Related Solutions

  1. JSP - Database Query and Vector
    hi, I am running a database query which returns 7000 records with 4 fields each. The flow is as follows: Page 1: Click on link to Page 2 Page 2: Accesses bean which runs query and stores records in vector. Vector is passed back to Page 2. First 20 element of vector is d...
  2. Vectors in Java
    In a program i'm working on, i am attempting to store data from files in a 3 dimensional vector. So basically i have a participant vector, each element is a slide vector, each element of that is the answer vector. Then what i want to do is put a value into the position of ...
  3. file io with vector
    part of the code: public String findInfo(String info) { if (info == null) return null; info = info.toLowerCase(); int n = save.size(); for (int i = 0; i < n; i++) { String dbs = (String)save.elementAt(i); ...

Free Tech Articles

  1. WARNING: 5 Reasons why you should NEVER fix a computer for free.
    It is in our nature to love the puzzle. We are obsessed. The lot of us. We love puzzles. We love the challenge. We thrive on finding the answer. We hate disarray. It bothers us deep in our soul. W...
  2. SCCM OSD Basic troubleshooting
    SCCM 2007 OSD is a fantastic way to deploy operating systems, however, like most things SCCM issues can sometimes be difficult to resolve due to the sheer volume of logs to sift through and the dispe...
  3. Migrate Small Business Server 2003 to Exchange 2010 and Windows 2008 R2
    This guide is intended to provide step by step instructions on how to migrate from Small Business Server 2003 to Windows 2008 R2 with Exchange 2010. For this migration to work you will need the fo...
  4. Create a Win7 Gadget
    This article shows you how to create a simple "Gadget" -- a sort of mini-application supported by Windows 7 and Vista. Gadgets can be dropped anywhere on the desktop to provide instant information, ...
  5. Outlook continually prompting for username and password
    There have been a lot of questions recently regarding Outlook prompting for a username and password whilst using Exchange 2007. There are a few reasons why this would happen and I will try to cover t...
  6. Backup Exchange 2010 Information Store using Windows Backup
    There seems to be quite a lot of confusion around the ability to backup Exchange 2010 using the built in Windows Backup feature. This stems from the omission of this feature prior to Exchange 2007 s...

Cloud Class Webinars

  1. Avoiding Bugs in Microsoft Access
    Alison Balter takes and in-depth look at avoiding bugs in Access. In this webinar you will learn about using the immediate window to debug your applications, invoking the debugger, using breakpoints to troubleshoot, stepping through code, setting the next statement to execute, ...
  2. Top 10 Best New Features in Visio 2010
    Scott Helmers gives live demonstrations of the top 10 new features in Visio 2010. This webinar will teach you how to create compelling diagrams by adding shapes to the page with a single click, linking the shapes in a diagram to data in Excel (or SQL Server, or SharePoint), ...
  3. IT Consultant Business Secrets Revealed
    Michael Munger, Experts Exchange tech pro and IT consultant, pulls back the curtain on his very successful businesses and answers question on every IT consultant and business owner should know about. He shares secrets on what he did to solve the 5 most common problems in IT, ...
  4. Disaster Recovery and Business Continuity
    Quest CTO, Mike Billon, gives an overview of the steps involved in building a dunamic disaster recovery plan. Through case studies and an examination of software/hardware tooles for monitoring and testing, you'll gain a better understandin of where you are, where you want ...
  5. Organize Your Visio Diagrams with Containers and Lists
    Scott Helmers uses cross functional flowcharts, wireframe diagrams, data graphic legends and seating charts to teach you: how to ustilize all three new structured diagram components in Visio 2010, the best practices for organizeing shapes in previous version of Visio, how to organize ...
  6. How to Us Objects, Properties, Events and Methods in Microsoft Access
    Alison Dalter gives an in-depbth look at objects, properties, events and methods in Microsoft Access. In this webinar you will learn about using the object browser, referring to objects, working with properties and methods, working with object variables, understanding the ...

Join the Community

Give a Little. Get a Lot.

Join the community of experts here and help other tech pros by answering question in your area of expertise. You can earn FREE access to all Experts Exchange's premium features and resources.

Join the Community

Answers

 

by: MuraliKanthPosted on 2009-07-02 at 20:43:09ID: 24769648

Please respond with the below details,

1. Count of total records on your table.?
2. Why is the return type of SQLManager.select(sql); - a vector ? to provide synchronized access?.
If Possible - paste the code for SQLManager.select
3. Are you using hibernate?

-Murali*







 

by: NASEEMAPosted on 2009-07-03 at 07:17:35ID: 24772499

1. Count of total records on your table.?  >>  20 to 25 Records
2. Why is the return type of SQLManager.select(sql); - a vector ? to provide synchronized access?.
If Possible - paste the code for SQLManager.select  -->please find the sqlmanger code
3. Are you using hibernate? >> i am not using hibernte

-----------------------------

public class SQLManager {
	
	/**
	 ****************************************************
	 * getTrans
	 * @return
	 * Transaction
	 ****************************************************
	 */
	public static Vector select(String sql) {
		Connection conn = ConnectionManager.getConnection();
		Vector vecRow = new Vector();
		try {
			Statement stmt = conn.createStatement();
			ResultSet rs = stmt.executeQuery(sql);
			int colCount = rs.getMetaData().getColumnCount();
			System.out.println("colCount="+colCount);
			String data = new String();
			while (rs.next()) {
				for (int i = 0; i < colCount; i++) {
					vecRow.add(rs.getString(i + 1));
				}
			}
			return vecRow;
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		} finally {
			try {
				if (!conn.isClosed()) {
					ConnectionManager.releaseConnection(conn);
				}
			} catch (SQLException e1) {
				e1.printStackTrace();
			}
		}
	}
	
	
                                              
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:

Select allOpen in new window

 

by: NASEEMAPosted on 2009-07-03 at 12:33:09ID: 24774073

hi all,
     Any solution for my problem....

 

by: MuraliKanthPosted on 2009-07-05 at 18:23:07ID: 24781940

@Naseema: Sorry for the late reply , since it was weekend.

I just gone through your code and tried simulating ur issue with one of my table holding 34 records and the results returned in 15 msec.

i would like you to do this on your machine. Before that Short answer for ur question is "No vector doesn't delay anything in ur code".


long strt =System.currentTimeMillis();
                    System.out.println(strt); // give this while entering into ur code.


System.out.println(System.currentTimeMillis()-strt); // this one before returning out of ur code.

Similarly same set u can use it inside ur SQLManager.select method to identify the msec it takes to execute the query execution part.

By this we can identify which causes the delay.

-Murali*

 

by: NASEEMAPosted on 2009-07-05 at 22:07:27ID: 24782673

Hi,
    thanks a lot for the reply. i will try now your suggestion and reply the post with the reply.



 

by: NASEEMAPosted on 2009-07-05 at 22:19:32ID: 24782722

hi ,
  i tried your comment i am getting error  operator - cannot be applied to java.lang.String,long }System.out.println("ending Time"+System.currentTimeMillis()-strt);

 

by: MuraliKanthPosted on 2009-07-05 at 22:22:15ID: 24782741

It should be this way when u append a String

System.out.println("ending Time"+ (System.currentTimeMillis()- strt));

-Murali*

 

by: NASEEMAPosted on 2009-07-05 at 22:35:54ID: 24782811

HI,
   I tried your comment and the output is

Starting Time   1246858188977

ending Time      77797

 

by: MuraliKanthPosted on 2009-07-05 at 22:37:27ID: 24782819

for which part of ur code did u try this?

Post the time for the SQLManger.select() as well.

 

by: NASEEMAPosted on 2009-07-05 at 23:17:51ID: 24782951

hi,
  i tried your comment please find the output as below

Starting Time1246859501110  (In jsp)
Starting Time in SQLManager Select 1246859512844

ending Time in SQLManager Select0
ending Time95422(in jsp)

 

by: MuraliKanthPosted on 2009-07-06 at 00:07:12ID: 24783122

Fine , then SQLManager doesn't cause any delay to execute your query.
Apply the same time settings to see how much time it takes to execute the below for loop.

Are you sure the record count is just 20 -25 rows? Can u print the size of the vRow vector to ensure the size?.


for (Iterator iter = vRow.iterator(); iter.hasNext();) {
                                                        pendingOrderInfo = new COrders();
                                                        element = (String)iter.next();
                                                        pendingOrderInfo.setOrd_no((element == null ? "" : element));
                                                        element = (String)iter.next();
                                                        pendingOrderInfo.setOrd_dt((element == null ? "" : element));
                                                        element = (String)iter.next();
                                                        pendingOrderInfo.setOrd_rec_dt((element == null ? "" : element));
                                                        pendingOrders.add(pendingOrderInfo);
                                                        }

 

by: NASEEMAPosted on 2009-07-06 at 00:36:38ID: 24783232

hi ,
  i tried your comment please find output as below


Starting Time            1246864946467 (in jsp)
Starting Time in SQLManager Select 1246864951530
vRow.size()              2360
Starting Time in Loop 1246864951780

ending Time in SQLManager Select   16
ending Time     55673(in jsp)
ending Time in Loop  0

Where as i executed the query from SQL prompt the record count is 118 and it took 1 second to execute the query from sql prompt

Whats wrong with my code?

 

by: MuraliKanthPosted on 2009-07-06 at 00:54:28ID: 24783301

1. First thing to check is the row count discrepancy between ur code execution and the SQL prompt execution. Print the query and copy paste the same in the SQL prompt. Similary add a int variable and increment inside the for loop in SQLManager.select() to see the record count like this below,

int index=0;
while (rs.next()) {
                                for (int i = 0; i < colCount; i++) {
                                        vecRow.add(rs.getString(i + 1));
                                }
                                index++;
                        }

System.out.println(index);

2.
Time between the JSP and the start of the SQLManager.select is  5063 msec , so what other steps do u perform in between?. I hope ur JSP time statement is placed right after line 12  ( means before calling the function. If not add one after line 12 and after line 13 to see the how much total time it takes to execute that function.

3. What is the total count of records shown on ur page?  2360  or 118.


Main reason for the delay could be any loop running recursively. If possible attach ur jsp and java file.. just the set of methods which are called.

 

by: NASEEMAPosted on 2009-07-06 at 03:25:23ID: 24783819

hi,
 i copied  your code and i found it  
System.out.println(index); --->output is ---> 1

2.I attached my JSPs and Java Classes

3. What is the total count of records shown on ur page?  --->  118.

Please let me know where i am wrong?

 

by: MuraliKanthPosted on 2009-07-06 at 20:22:40ID: 24791230

Naseema:

Just took a quick look in ur code.

You should calculate the time for this part of ur code. Print start time before if condition and print end time after end of if statement.

<%if (sortBy!=null)
                                          {
                                                pendingOrders=new SupportPendingOrders();
                                              pOrders=new Vector();
                                              pOrders=pendingOrders.getPendingOrders(supplier_id,sortBy,sortOrder);
                                                System.out.println("sortValue values is "+sortValue);
                                          }
                                          else
                                          {                                          
                                          pendingOrders=new SupportPendingOrders();
                                            pOrders=new Vector();
                                            pOrders=pendingOrders.getPendingOrders(supplier_id);
                                          }                                          
                                          %>
I am sure this would be much faster.


I want you to check few areas,

1. fileprocess.writeToLogFile("[OrderList.jsp]-----Start Pending Orders=","blue");

>> what is the function of this?.. R u writing to a log file? if Yes why dont you use log4j instead of having ur own API.

2. countFHSLog.getLogCounter

>> this is taking the records from log table .Find out how many records does it fetch?

3. <%for (Iterator iter1 = lOrders.iterator(); iter1.hasNext();)
                            {

                          countFHSLog=(SupportPendingOrders) iter1.next();
                 
                      }    
             %>

>> what this particular piece of code is expected to do in the jsp file?. For every iteration of for loop the object value is just overridden. I think you missed some logic here.

4. More over if u need to find the time of execution of a for loop then you need to print the start time before for loop statment and get the end time after the forloop statement. What u have done in ur code is u have placed them inside the for loop which will give the time for each iteration.


Overall , You have lot of iterations running on ur jsp page , and i suspect the count of records for few should be very high which contributes to the delay.Once u find the longest running for loop then u need to dig into that to make sure you fetch only the required records and not all.

-Murali*

 

by: NASEEMAPosted on 2009-07-06 at 22:35:43ID: 24791674

hi,
   i found where exactly the problem.The problem is here as below


<%for (Iterator iter = pOrders.iterator(); iter.hasNext();)
          {
            
               pendingOrders=(SupportPendingOrders) iter.next();
               if (pendingOrders !=null)
                  {
                       
                                             
                     lOrders=countFHSLog.getLogCounter(pendingOrders.getOrd_no                      (),pendingOrders.getSeq_nr());//problem is here
                   }
          }

The problem at lOrders=countFHSLog.getLogCounter(pendingOrders.getOrd_no(),pendingOrders.getSeq_nr()); and in the iteration
for (Iterator iter1 = lOrders.iterator(); iter1.hasNext();)

if i remove this line lOrders=countFHSLog.getLogCounter(pendingOrders.getOrd_no(),pendingOrders.getSeq_nr()); and the second iteration
the execution time is  as below
 ========================================================
 Starting Time Before For Loop  1246943581827
 ========================================================
 ========================================================
 ending Time after for loop  19063
 ========================================================

if i include the code lOrders=countFHSLog.getLogCounter(pendingOrders.getOrd_no(),pendingOrders.getSeq_nr());
and
<%for (Iterator iter1 = lOrders.iterator(); iter1.hasNext();)  //Problem is here too
                            {
                          countFHSLog=(SupportPendingOrders) iter1.next();
                               
                 
                      }    
below is the time is as below

 ========================================================
 Starting Time Before For Loop1246943748922
 ========================================================
 ========================================================
 ending Time after for loop  83079
 ========================================================
 ========================================================



The code lOrders=countFHSLog.getLogCounter(pendingOrders.getOrd_no(),pendingOrders.getSeq_nr());

This code will take the ordernumber and sequence number from the first iteration and get the log counter for each order number.

So how can we make it faster execution.

 

by: MuraliKanthPosted on 2009-07-06 at 22:52:01ID: 24791730

You need to scrap this whole method getLogCounter(String tprID,String seq_nr)

You are just getting count(*) for which why you need unnecessary Vector. Do a normal jdbc code and just return the int values/ or any object. Something like this...


public SupportPendingOrders getLogCounter(String tprID,String seq_nr) {
                                    SupportPendingOrders logCountInfo = null;
                                     String sql="SELECT COUNT(*)"
                                                       +" FROM   log"
                                                       +" WHERE  opn_id="+tprID
                                                       +" AND opn_flag ='TPR'"
                                                       +" AND opn_seq_nr="+seq_nr
                                                         +" AND upd_flag  IS NULL";      
                               //PreparedStatement - implement this
                                         //resultset - implement this

                                    if(rs.next()){
                                          logCountInfo = new SupportPendingOrders();
                                          logCountInfo.setLogCount(rs.getInt(1));                                                 
                                    }      
                              return logCountInfo ;                              
                              }

Additionally u can pass all ids as a string to the above qery and take the output in a Map and then iterate in a single loop.


I think already we have deviated a long distance from the actual question in this thread. I suggest you open a new post for further questions in this regard.

-Murali*

 

by: NASEEMAPosted on 2009-07-06 at 23:13:32ID: 31599389

Excellent solution

20120131-EE-VQP-002

3 Ways to Join

30-Day Free Trial

The Experts

98% positive feedback on 31,087 answers since March 2000. angeliii is a Microsoft Most Valuable Professional for his work with MS SQL Server & Develoment.

He has also proven his knowledge of Visual Basic Programming, PHP Scripting and Oracle Databases.

The Experts

97% positive feedback on 10,752 answers since July 2000. lrmoore has more than 18 years experience in the networking industry.

The six-time Mircosoft MVPs specialties include firewalls, virtual private networking, and network management.

Testimonials

"...and excellent source for support... Kind of like having your very own IT dept." Electriciansnet

Testimonials

"I was apprehensive at signing up at first. However... it has already made my life as an IT administrator much easier." JaCrews

Testimonials

"WOW! You guys have great, active, and knowledgeable people on here." moore50

Business Clients

Business Clients

In the Press

"If you’ve got a question... Experts Exchange can supply an answer.”

In the Press

"...an invaluable aid for both IT professionals and those who require tech support."

In the Press

"where IT professionals provide quick answers on just about any topic"

Business Account Plans

Loading Advertisement...