当前位置: 首页 > 图灵资讯 > 技术篇> JAVA 使用哈希表操作数据库的例子 Using Hashtables to Store & Extract results from a Database.

JAVA 使用哈希表操作数据库的例子 Using Hashtables to Store & Extract results from a Database.

来源:图灵教育
时间:2024-03-03 10:44:11

 

使用哈希表操作数据库的例子 // * 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 arrayResultSetMetaData 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 arraywhile (ars_data.next(){/////) 3) If we are at the last index of our hashtable then expand it// by another 20 indexesif (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 arrayHashtable 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 appearsfor (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 dataif (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 keyfor ( 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 happenslht_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 filels_tabfile = "";}else{// 2) first get column headersint 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 columnString[] 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 themif(ab_header) ls_tabfile = ls_tabfile + " ";// 6) loop through and gather tha data to displayfor (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 filels_tabfile = "";}else{// 2) IF requested print out the header filesif (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 displayfor (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 datafor(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;}