How to get the database table structure.

1. Initialize these two templates during injection.

Copy code
    /** 
     * 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); 
    }
     
Copy code

2. Obtain table structure information.

Copy code
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      }
Copy code

3. Obtain all tables in the database.

Copy code
 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      }
Copy code

Guess you like

Origin blog.csdn.net/linwei_hello/article/details/21639657