做制作开发平台时,首要的一点是如何取得数据库表结构信息。一般通用的做法就是通过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);
   }

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

通过jdbc取得数据库表结构信息的更多相关文章

  1. Java 通过JDBC查询数据库表结构(字段名称,类型,长度等)

    Java 通过JDBC查询数据库表结构(字段名称,类型,长度等) 发布者:唛唛家的豆子   时间:2012-11-20 17:54:02   Java 通过JDBC查询数据库表结构(字段名称,类型,长 ...

  2. 使用JDBC connect获取数据库表结构信息

    1.这是生成代码的关键 引入maven依赖 <dependency> <groupId>mysql</groupId> <artifactId>mysq ...

  3. sql语句查询数据库表结构信息

    开发中经常用到查询指定表及其字段的信息,以下是我整理的SQL语句查询方法,供自己平时使用也提供给大家参考! 1.适用MS SQL SERVER: SELECT 表名 = then d.name els ...

  4. java中访问mysql数据库中的表结构信息

    package cn.hncu.meta; import java.sql.Connection;import java.sql.DatabaseMetaData;import java.sql.Re ...

  5. Activiti工作流数据库表结构

    Activiti工作流引擎数据库表结构 数据库表的命名 Acitiviti数据库中表的命名都是以ACT_开头的.第二部分是一个两个字符用例表的标识.此用例大体与服务API是匹配的. ACT_RE_*: ...

  6. sqlserver获取数据库表结构

    SqlServer获取所有数据库,表,表结构 --获取所有数据库 SELECT * FROM Master..SysDatabases ORDER BY Name --获取test数据库下所有表 us ...

  7. c#通过oledb获取excel文件表结构信息

    这个问题来自论坛提问,同理可以获得access等数据库的表结构信息. using System; namespace ConsoleApplication11 { class Program { pu ...

  8. activiti数据库表结构全貌解析

    http://www.jianshu.com/p/e6971e8a8dad 下面本人介绍一些activiti这款开源流程设计引擎的数据库表结构,首先阐述:我们刚开始接触或者使用一个新的东西(技术)时我 ...

  9. K3数据库表结构

    K3数据库表结构查看方法,直接在数据库中打开表 t_TableDescription,其中即各表及其与K3功能的对应关系 也可直接查询: select * from t_TableDescriptio ...

随机推荐

  1. javascript的继承种类

    继承一般要实现以下三层含义: 1)子类实例可以共享父类的方法: 2)子类可以覆盖父类的方法或者扩展新的方法: 3)子类和父类都是子类实例的类型. 一.构造继承法 子类中调用父类的构造函数来维护的,该继 ...

  2. css标签选择器

    /*标签选择器*/ input[type="text"] { width: 60%; } </style>

  3. Java中final关键字的用法

  4. Cocos2dx 3.2 节点之间相互通信与设置触摸吞噬的方法

    实际开发中,我们经常会遇到这样的情况.我们有一个层layer1,这个层包含一个menu层,menu1层里又包含了一个节点按钮button1.现在需要实现一个效果:点击button1弹出一个对话框,这个 ...

  5. [转]C++基本功和 Design Pattern系列 ctor & dtor

    今天Aear讲的是class.ctor 也就是constructor, 和  class.dtor, destructor. 相信大家都知道constructor 和 destructor是做什么用的 ...

  6. 重拾C++ 基础知识总结(二)

    1.标准库string类型: 用户程序要使用string类型对象,必须包含相关头文件 #include <string> 字符串字面值与标准库string类型不是同一种类型,字符串字面值是 ...

  7. Tweet button with a callback – How to?

    原文: http://jaspreetchahal.org/tweet-button-with-a-callback-how-to/ 两种方式:1. 原生的button <a href=&quo ...

  8. 浅析Mysql数据回滚错误的解决方法

    介绍一下关于Mysql数据回滚错误的解决方法.需要的朋友可以过来参考下   MYSQL的事务处理主要有两种方法.   1.用begin,rollback,commit来实现   begin 开始一个事 ...

  9. HTML语义化标签(一)

    总所周知,现在的网页是由HTML.CSS.JS三大元素组成,而HTML是其中最重要的部分,是整个网页的骨架,CSS和js在骨架的基础上进行相应的修饰,使得网页成为一个有血有肉,可以动的“人”.如果HT ...

  10. 逻辑很重要:一句sql语句的事,自己却想了半天,绕了个大弯子

    问题:系统升级后审核认证信息分别写入两个表,现在需要链接用户表和相应的新旧审核表获取字段值? 钻进胡同里:一直纠结于升级之后的会员信息从新表查,升级之前的数据从旧表查,纠结于根据时间戳分条件判断, 其 ...