zoukankan      html  css  js  c++  java
  • 通过jdbc取得数据库表结构信息

    做制作开发平台时,首要的一点是如何取得数据库表结构信息。一般通用的做法就是通过JDBC中的ResultSetMetaData类来进行操作,当你取得了数据库表结构信息后,比如说表的每个字段名称,字段类型等。

    首先取得数据库连接后取得DatabaseMetaData。

    DatabaseMetaData dbmd = con.getMetaData();

    con是一个数据库连接,直接通过连接信息取得。

    然后我们就可以取当前数据库中的所有表:

            ArrayList v = new ArrayList();
            ResultSet rs = null;
            String[] typeList = new String[] { "TABLE" };
            rs = dbmd.getTables(catalog, schema, null, typeList);
            for (boolean more = rs.next(); more; more = rs.next()) {
                String s = rs.getString("TABLE_NAME");//取得表名
                String type = rs.getString("TABLE_TYPE");
                if (type.equalsIgnoreCase("table") && s.indexOf("$") == -1)
                    v.add(s);
            }

    取得表名我们再执行select * from tablename 的方法,取得结果集:

    String sql = "select * from "+tableName;

       Statement state = con.createStatement();
       ResultSet rs = state.executeQuery(sql);
       ResultSetMetaData rsmd = rs.getMetaData() ;
       for(int i = 1; i <= rsmd.getColumnCount(); i++)
       {
                 String colname = rsmd.getColumnName(i); 
                 String typeName = rsmd.getColumnTypeName(i); 
                 int itype = rsmd.getColumnType(i); 
                 int size = rsmd.getColumnDisplaySize(i);  
                 int precision=rsmd.getPrecision(i);
                 int n = rsmd.isNullable(i);  
                 int scale=rsmd.getScale(i);
                 boolean nullable = true;
                 switch (n) {
                 case 0: // '/0'
                     nullable = false; //不为空
                     break;

                 case 1: // '/001'
                     nullable = true;
                     break;

                 default:
                     nullable = true;
                     break;
                 }
                 SQLColumn col = new SQLColumn(colname);
                 SQLType type = simpleType(typeName, itype);
                 if (type.allowsParameters())
                     type.setParameterString("" + size);
                 col.setType(type);
                 col.setIType(itype);
                 col.setSize(size);
                 col.setScale(scale);
                 col.setPrecision(precision);
                 col.setNullable(nullable);
                 col.setReadOnly(rsmd.isReadOnly(i));
                 col.setAutoIncrement(rsmd.isAutoIncrement(i));
                 col.setSearchable(rsmd.isSearchable(i));
                 col.setCurrency(rsmd.isCurrency(i));
                 col.setCaseSensitive(rsmd.isCaseSensitive(i));
                 col.setSigned(rsmd.isSigned(i));
                 col.setClassType(rsmd.getColumnClassName(i));
                 col.setDisName(rsmd.getColumnLabel(i));
                 if ( col.getDisName().length() > 0 )
                  col.setName(col.getDisName()) ;
        columns.add(col);
       }

    以上操作就取得了表的每个字段信息。得到这些字段信息,就可以为数据库层的各种操作生成所需的代码了。

  • 相关阅读:
    Sql分组后,字符串列合并相加
    'sqlplus' 不是内部或外部命令,也不是可运行的程序
    一个共通的viewModel搞定所有的编辑页面经典ERP录入页面(easyui + knockoutjs + mvc4.0)
    一个共通的viewModel搞定所有的分页查询一览及数据导出(easyui + knockoutjs + mvc4.0)
    Asp.Net MVC及Web API框架配置会碰到的几个问题及解决方案
    asp.net mvc利用knockoutjs实现登陆并记录用户的内外网IP及所在城市
    关于centos使用yum命令安装时出现 Invalid GPG Key 错误到解决方法。
    动态规划:最长上升子序列(LIS)
    OJ题目分类
    ZOJ Problem Set 1025解题报告
  • 原文地址:https://www.cnblogs.com/fangfangs/p/3374989.html
Copyright © 2011-2022 走看看