• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Tim Cooke
  • paul wheaton
  • Paul Clapham
  • Ron McLeod
Sheriffs:
  • Jeanne Boyarsky
  • Liutauras Vilda
Saloon Keepers:
  • Tim Holloway
  • Carey Brown
  • Roland Mueller
  • Piet Souris
Bartenders:

Help-> sorting different table columns

 
Ranch Hand
Posts: 61
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Hi everybody,
My project calls for development of a table, with different
column such as the following:

NAME SSN SALARY AGE
andrew 111-00-1111 12345 20
tracy 201-01-0101 54545 20
daren 303-33-3333 12135 21
In the table, the SSN is unique for each row, however,
other columns may not be unique. I need to develop a
sorting scheme in the servlet/jsp for the table. For example,
when users click Salary, I need the table to be displayed
from top to bottom with Salary in ascending or descending
order. Of course, it will allow users to sort the table
according to the column they want by clicking any of the
four column titles.
For this project, I don't plan/don't want to write my own
sorting scheme. Instead, I hope to use any existing Java
classes to do the sorting (believing those will be more
efficient anyway). Thus, I don't plan to implement each
column as a single dimension array. Instead, I am thinking
to use Hashmap to store the table. What I am thinking is as
following:
(a) use SSN as the key, since it is unique
(b) for each row, I will have a key (SSN), the
value of the key in the hashmap will be a string, in
the form of, i.e., 1st row:
"andrew, 12345, 20"
However, by doing so, I encounter some serious problems.
If users click SSN, the table can be sorted, because I
can always sort the key from the hashmap, and then from
the key I get all the corresponding value from the hashmap.
However, when users click other column, such as NAME
or AGE, I have no way to sort the things. Apparently
I am in the wrong path. Do you people have any advice?
Again, I don't want to write my own sorting scheme as long
as I don't have to.
Any kind souls out there please help! Sam
 
Ranch Hand
Posts: 164
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Could you use a database table to store this information. Then you could use SQL command to get the data you need.
SELECT * FROM TABLE ORDER BY SSN (DESC)
This command will return a result set ordered by SSN. Use DESC as an optional paramter if you need the result set in descending order.
SELECT * FROM TABLE ORDER BY SALARY
The above command will return a result set ordered by SALARY.
Of course I am assuming you have the appropriate JDBC drivers.
Here is a link to the Sun tutorial
http://java.sun.com/docs/books/tutorial/jdbc/index.html
Another solution would be to use the Collections Framework for Java. I have only been working with them for the past week, but they seem pretty powerful. Here is a link to the Sun tutorial on collections:
http://java.sun.com/docs/books/tutorial/collections/index.html
The book by John Zukowski is also a good reference.
Hope this helps.
-Bob
 
Sam Zheng
Ranch Hand
Posts: 61
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

To my understanding, the use of ResultSet doesn't work for
my case. In my program, I follow a servlet centric design,
which has a jsp->servlet->jsp paradigm. The servlet gets
all the data from the database using JDBC, then packs the
data and hand off to a jsp to present the result. What I am
thinking is that for these sorting requests, I don't want to
obtain another JDBC connection, instead, I use a session
tracking scheme to store these data and perform the
sorting directly on these data.
For example, suppose the initial request is to have the
output sort by NAME, I will obtain all the necessary
data through JDBC, then pack the data into a hashmap,
and hand off to a jsp. Once the data are displayed, if
users want to sort the data based on SALARY, I will not
ask the servlet to obtain another JDBC connection,
instead, it will directly perform the sorting on the
data itself, which I have deposited into the session.
If you have any better idea, please let me know.
Thanks!
Sam
 
Greenhorn
Posts: 1
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
I would suggest creating a different comparator for each of the different ways to sort. You would have to store the data in a List (a map doesn't have a notion of order). Then you could call Collections.sort(List, Comparator). This would give you the list in the order you want.
-Peter
 
author
Posts: 3252
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Summarising your options:

  • You can store your data in the session and sort, as Peter suggested, using Collections.sort() and a Comparator for each sorting field you want to support (you can easily implement sorting order using a flag in the comparator). You will need to wrap your data in an object, but that's a good idea anyway.
  • As Bob suggested, you can query the database for every request, and leave the sorting up to the db. The fact that you use a servlet centric design (MVC?) doesn't prevent you from doing this (if it does, re-think your design).

  • Which one to choose?

    • Using Java to sort session-bound data is an option only if both the amount of data to list and the number of users to be supported is limited. For large lists or high-volume websites, replicating the data in each session would consume prohibitive amounts of memory. In those cases you would have to create an application-scoped data cache (beware of threading issues though) or EJB-tier cache.
    • Firing each separate request at the database is easy and keeps the server light, at the expense of database resources. If your website has high volume, you cannot afford a db access for each request and you'll need a cache as described above.

    • Seeing that you seem to be developing an intranet application of some kind, I would personally lean towards the second (db query) option because it's likely to turn out the simplest to develop and maintain. In all but the largest intranets, development and maintenance are far more important considerations than outright performance.
      - Peter

      [This message has been edited by Peter den Haan (edited June 12, 2001).]
 
reply
    Bookmark Topic Watch Topic
  • New Topic