1. Initialize these two templates during injection.
/** * Inject the data source, which is configured in the Spring configuration file * Initialize these two templates when injecting * @param dataSource * Method create author: yanwei * Method create dateTime: 2011-11-2 03:43 PM :13 * Method update author: * Method update dateTime: */ @Resource public void setDataSource(DataSource dataSource) { this .dataSource = dataSource; jdbcTemplate = new JdbcTemplate(dataSource); simpleJdbcTemplate = new SimpleJdbcTemplate(dataSource); }
2. Obtain table structure information.
1 /** 2 * Get table structure information 3 * @param tableName table name 4 * @return 5 * @throws Exception 6 * Method create author: yanwei 7 * Method create dateTime: 2011-12-21 01:01:17 PM 8 * Method update author: 9 * Method update dateTime: 10 */ 11 public List<DsClientColumnInfo> getDsTableColumnInfo(String tableName) throws DataAccessFailureException{ 12 13 ResultSet resultSet = null ; 14 Connection connection = null ; 15 java.util.List<DsClientColumnInfo> clientTableInfos = new ArrayList<DsClientColumnInfo>(); 16 try { 17 connection = this .jdbcTemplate.getDataSource().getConnection(); 18 // Get column information 19 resultSet = connection.getMetaData().getColumns( null , null , tableName, null ); 20 while (resultSet.next()) { 21 // Get the field name 22 String name = resultSet.getString("COLUMN_NAME"); 23 // Get the field type name 24 String type = resultSet.getString("TYPE_NAME"); 25 // Get the field size 26 int size = resultSet.getInt("COLUMN_SIZE") ; 27 // Get field remarks 28 String remark = resultSet.getString("REMARKS"); 29 DsClientColumnInfo info = new DsClientColumnInfo( null , null , null , name, remark, size, type, "false"); 30 clientTableInfos.add (info); 31 } 32 33 // Get primary key information 34 resultSet = connection.getMetaData().getPrimaryKeys( null , null , tableName); 35 while (resultSet.next()){ 36 String primaryKey = resultSet.getString("COLUMN_NAME"); 37 // Set whether it is the primary key 38 for (DsClientColumnInfo dsClientColumnInfo : clientTableInfos) { 39 if (primaryKey != null && primaryKey.equals(dsClientColumnInfo.getClientColumnCode())) 40 dsClientColumnInfo.setIsParmaryKey("true"); 41 else 42 dsClientColumnInfo.setIsParmaryKey("false"); 43 } 44 } 45 46 // Get foreign key information 47 resultSet = connection.getMetaData().getImportedKeys( null , null , tableName); 48 while (resultSet.next()) { 49 String exportedKey = resultSet.getString("FKCOLUMN_NAME"); 50 // Set whether it is a foreign key 51 for (DsClientColumnInfo dsClientColumnInfo : clientTableInfos) { 52 if (exportedKey != null && exportedKey.equals(dsClientColumnInfo.getClientColumnCode())) 53 dsClientColumnInfo.setIsImportedKey("true"); 54 else 55 dsClientColumnInfo.setIsImportedKey("false"); 56 } 57 } 58 59 60 } catch (Exception e) { 6 1e .printStackTrace(); 62 throw new RuntimeException("Failed to obtain field information, please report the problem to the maintainer." + e.getMessage(), e); 63 } finally { 64 if ( resultSet !=null ) 65 try { 66 resultSet.close(); 67 } catch (SQLException e) { 68 e.printStackTrace(); 69 throw new DataAccessFailureException("Failed to close the result set resultSet.",e); 70 } finally { 71 if (connection != null ) 72 try { 73 connection.close(); 74 } catch (SQLException e) { 75 e.printStackTrace(); 76 throw new DataAccessFailureException("Failed to close connection connection.",e); 77 } 78 } 79 } 80 81 Set set = new HashSet(); 82 set.addAll(clientTableInfos); 83 clientTableInfos.clear (); 84 clientTableInfos.addAll(set); 85 return clientTableInfos; 86 }
3. Obtain all tables in the database.
1 /** 2 * 获得数据库中所有的表 3 * @return 4 * Method create author: yanwei 5 * Method create dateTime: 2012-1-5 上午11:23:54 6 * Method update author: 7 * Method update dateTime: 8 * @throws SQLException 9 */ 10 public Map<String, String> getDatabaseTables() throws DataAccessFailureException{ 11 ResultSet resultSet = null; 12 Connection connection = null; 13 Map<String, String> map = new HashMap<String, String>(); 14 try { 15 String[] types = {"TABLE"}; 16 connection = this.jdbcTemplate.getDataSource().getConnection(); 17 String databaseName = SynXmlAnalysis.getElementValueByName(DATABASE_NAME); 18 resultSet = connection.getMetaData().getTables(null, databaseName, null, types); 19 while(resultSet.next()){ 20 String tableName = resultSet.getString("TABLE_NAME"); 21 String remark = resultSet.getString("REMARKS"); 22 map.put(tableName, remark); 23 } 24 } catch (SQLException e) { 25 e.printStackTrace(); 26 throw new DataAccessFailureException(e); 27 }catch (Exception e) { 28 e.printStackTrace(); 29 }finally{ 30 if(resultSet != null) 31 try { 32 resultSet.close(); 33 } catch (SQLException e) { 34 e.printStackTrace(); 35 throw new DataAccessFailureException("关闭结果集resultSet失败。",e); 36 }finally{ 37 if(connection != null) 38 try { 39 connection.close(); 40 } catch (SQLException e) { 41 e.printStackTrace(); 42 throw new DataAccessFailureException("Failed to close connection.",e); 43 } 44 } 45 46 } 47 return map; 48 }