zoukankan      html  css  js  c++  java
  • 1,怎么获得数据库表结构。

    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 }
  • 相关阅读:
    Linux下SVN(Subversion)自动启动脚本
    Linux安装SVN
    【转】utf-8的中文是一个汉字占三个字节长度
    24-《分布式系统架构的本质》系列04——分布式系统关键技术:全栈监控
    23-《分布式系统架构的本质》系列03——分布式系统的技术栈
    22-《分布式系统架构的本质》系列02——从亚马逊的实践,谈分布式系统的难点
    由 leetcode 136. Single Number 引出的异或总结
    【工具软件】-Beyond Compare4 试用到期
    01-更新软件源
    01-程序员也要会项目管理
  • 原文地址:https://www.cnblogs.com/csuwangwei/p/2331737.html
Copyright © 2011-2022 走看看