怎么获得数据库表结构。

来源:互联网 发布:淘宝描述店铺怎么写 编辑:程序博客网 时间:2024/06/10 03:15
怎么获得数据库表结构。

1,在注入时初始化这两个模板。

复制代码
    /**     * 注入数据源, 该数据源在Spring配置文件中配置     * 在注入时初始化这两个模板     * @param dataSource     * Method create author: yanwei     * Method create dateTime: 2011-11-2 下午03:43: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,获取表结构信息。

复制代码
 1 /** 2      * 获取表结构信息 3      * @param tableName 表名 4      * @return 5      * @throws Exception 6      * Method create author: yanwei 7      * Method create dateTime: 2011-12-21 下午01:01:17 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             //获得列的信息19             resultSet = connection.getMetaData().getColumns(null, null, tableName, null);20             while (resultSet.next()) {21                  //获得字段名称22                  String name = resultSet.getString("COLUMN_NAME");23                  //获得字段类型名称24                  String type = resultSet.getString("TYPE_NAME");25                  //获得字段大小26                  int size = resultSet.getInt("COLUMN_SIZE");27                  //获得字段备注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             //获得主键的信息34             resultSet = connection.getMetaData().getPrimaryKeys(null, null, tableName);35             while(resultSet.next()){36                  String  primaryKey = resultSet.getString("COLUMN_NAME");37                  //设置是否为主键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             //获得外键信息47             resultSet = connection.getMetaData().getImportedKeys(null, null, tableName);48             while(resultSet.next()){49                 String  exportedKey = resultSet.getString("FKCOLUMN_NAME");50                 //设置是否是外键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) {61             e.printStackTrace();62             throw new RuntimeException("获取字段信息的时候失败,请将问题反映到维护人员。" + 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("关闭结果集resultSet失败。",e);70                 }finally{71                     if(connection != null)72                         try {73                             connection.close();74                         } catch (SQLException e) {75                             e.printStackTrace();76                                throw new DataAccessFailureException("关闭连接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,获得数据库中所有的表。

复制代码
 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("关闭连接connection失败。",e);43                         }44                 }45         46         }47         return map;48     } 
原创粉丝点击