|
JAVA 使用哈希表操作数据库的例子
|
| 发表日期:2004-07-26 19:31:48 | 作者: 出处: |
|
使用哈希表操作数据库的例子 |
// * This code is distributed in the hope that it will be useful, * // * but WITHOUT ANY WARRANTY; without even the implied warranty of * // * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * // ******************************************************************** // // Using Hashtables to Store & Extract results from a Database. // // These functions are an example on how to get the data out of a // resultset from a database and store the values in a Hashtable. // several of the function are then an example on how to get the data // out of the hashtables. Why would you want to do all this work? // Maintaining a database connection over the web is expensive. By // dumping the data into a hashtable you can minimize the amount of // time you stay connected to your database. Also by storing the data // in a hashtable offers flexible way to pass your data from // object to object. // // This is a set of five functions // // Function makeHashTable : // Takes a database ResultSet and places the data into a // Hashtable array for later use. // // Function cleanHashTable : // Takes a Hashtable array and removes the unused portion // of a hashtable array. For example: You use makeHashTable // and since it allocates the hashtable array in chunks of 20, // its possible that it creates a hashtable of size 40, but // only the first 22 indexes are used. So makeHashTable calls // the cleanHashTable function which resizes the Hashtable // array to only 22 indexes. // //Function columnOrder: // Since a Hashtable does not guarantee to maintain the order // of the elements put into it. This function produces a // hashtable to store the column order of the ResultSet // //Function hastToTabFile // An example on how to take a hashtable produced by the // makeHashTable function and turn it into a tab delimited // output string (used to download a dataresult as a flatfile) // This function uses a the results from the columnOrder // function to navigate the hashtable. If this function can`t // find this index hashtable, it then passes the hashtable // to the hashToTab Function to step through the hashtable using // enumeration methods. // //Function hashToTab // If no index hasharray was found then this function uses // Enumeration to step through the Hashtable and return a // result // ////////////////////////////////////////////////////////////////////////// // // Please note the following. // -I suspect using a Vector would give much faster results . // -If you are using Java 1.2 You should consider using an ArrayList, // HashSet or TreeSet rather than a Hashtable or a Vector. // -Use a Hashtable or Vector when you want java 1.1.x compatibility // //////////////////////////////////////////////////////////////////////////
public Hashtable[] makeHashTable(ResultSet ars_data) { int li_columns = 0; int li_rowcount = 0;
Hashtable[] lht_results = new Hashtable[20];
try { // 1)get the column count and store our column order information // in our first index of our Hashtable array ResultSetMetaData lmeta_data = ars_data.getMetaData();
li_columns = lmeta_data.getColumnCount();
if (li_columns > 0) { lht_results[li_rowcount] = columnOrder(lmeta_data,li_columns); li_rowcount++; }
// 2)loop through the result set and add the data 1 row at a time to // the hashtable array while (ars_data.next()) { // 3) If we are at the last index of our hashtable then expand it // by another 20 indexes if (li_rowcount == lht_results.length) { Hashtable[] lht_temp = new Hashtable[lht_results.length + 20]; for (int li_loop = 0; li_loop < lht_results.length ; li_loop++) { lht_temp[li_loop] = lht_results[li_loop]; } lht_results = lht_temp; }
// 4) loop through our column information and add it to our hash array Hashtable lht_row = new Hashtable(1); for ( int i = 1; i <= li_columns; i++) { Object luo_value = null; try { luo_value = ars_data.getObject(i); } catch(Exception e){} if (luo_value ==null) luo_value = new String(""); lht_row.put(lmeta_data.getColumnLabel(i),luo_value); }
lht_results[li_rowcount] = lht_row; li_rowcount++;
} } catch(SQLException e) { }
if (lht_results[0] == null) { return null; }
return cleanHashTable(lht_results); }
private Hashtable[] cleanHashTable(Hashtable[] aht_data) { Hashtable[] lht_temp = null; int li_total_rows = aht_data.length;
// 1) loop thru and determine where the first null row appears for (int i=0; i<aht_data.length; i++) { if (aht_data == null) { li_total_rows = i; break; } }
// 2) rebuild a new hashtable array of the right size // and reload it with your data if (li_total_rows < aht_data.length) { lht_temp = new Hashtable[li_total_rows];
for (int i=0; i<li_total_rows; i++) { lht_temp[i] = aht_data[i]; }
aht_data = lht_temp; lht_temp = null; }
return aht_data; }
private Hashtable columnOrder(ResultSetMetaData ameta_data, int ai_columns) { // 1) Size the Hashtable to be slighly larger than column count // and load factor to 1 so the hash table wont have to resize itself. Hashtable lht_row = new Hashtable((ai_columns + 3),1);
try { // 2) Store how many columns we have. lht_row.put("Column_Count",String.valueOf(ai_columns));
// 3) Loop thru and store each column label and use its position // number as its key for ( int i = 1; i <= ai_columns; i++) { lht_row.put(String.valueOf(i),ameta_data.getColumnLabel(i)); } } catch (SQLException e) { // 4 Return a null result if an error happens lht_row = null; }
return lht_row; }
public String hastToTabFile(Hashtable[] ahash_data, boolean ab_header) { //***************************************************************** // ahash_data: array of hashtables to convert to tabfile // ab_header : True if you want the tab file to include the headers //***************************************************************** String ls_tabfile = "";
if (ahash_data == null) { // 1) if no data then return empty file ls_tabfile = ""; } else { // 2) first get column headers int li_column_count = 0; String ls_column_count = ahash_data[0].get("Column_Count").toString(); try { li_column_count = Integer.parseInt(ls_column_count); } catch(NumberFormatException e) { // 3) since this hashtable doesnt have the the column data stashed // treat it as a normal hashtable array return hashToTab(ahash_data,ab_header); }
// 4) Gather up each columns label/key name also build up the header column String[] ls_indexes = new String[li_column_count];
for(int icol = 0; icol < li_column_count; icol++) { ls_indexes[icol] = ahash_data[0].get(String.valueOf(icol+1)).toString(); if(ab_header) ls_tabfile = ls_tabfile + ls_indexes[icol] + " "; }
// 5) Include the headers in the file if user requested them if(ab_header) ls_tabfile = ls_tabfile + " ";
// 6) loop through and gather tha data to display for (int irow=1; irow < ahash_data.length; irow++) { if (ahash_data[irow] != null) { for(int icol = 0; icol < li_column_count; icol++) { ls_tabfile = ls_tabfile + ahash_data[irow].get(ls_indexes[icol]).toString() + " "; } ls_tabfile = ls_tabfile + " "; } } }
return ls_tabfile; }
private String hashToTab(Hashtable[] ahash_data, boolean ab_header) {//***************************************************************** // ahash_data: array of hashtables to convert to tabfile // ab_header : True if you want the tab file to include the headers //***************************************************************** String ls_tabfile = "";
if (ahash_data == null) { // 1) if no data return empty file ls_tabfile = ""; } else { // 2) IF requested print out the header files if (ab_header) { for(Enumeration lenum_header = ahash_data[0].keys(); lenum_header.hasMoreElements();) { String ls_col = lenum_header.nextElement().toString() + " "; ls_tabfile = ls_tabfile + ls_col; } ls_tabfile = ls_tabfile + " "; }
// 3) Loop through the rows and gather tha data to display for (int i=0; i < ahash_data.length; i++) { Hashtable lhash_row = ahash_data[i]; if (lhash_row != null) { // 4) Loop thru each column and prints the columns data for(Enumeration l_enum = lhash_row.keys(); l_enum.hasMoreElements();) { String ls_col = l_enum.nextElement().toString() ; ls_tabfile = ls_tabfile + lhash_row.get(ls_col).toString() + " "; } ls_tabfile = ls_tabfile + " "; } } }
return ls_tabfile; }
(作者: 来源:jsp爱好者) |
|
【返回顶部】
【打印本页】
【关闭窗口】
|
|
|