package com.walker.dbmeta; import com.walker.connector.Address; import com.walker.connector.support.DatabaseConnector; import com.walker.db.DatabaseException; import com.walker.db.TableInfo; import com.walker.db.page.GenericPager; import java.util.List; import java.util.Map; /** * 数据库元数据引擎定义,仅获取数据库的元数据相关信息,与系统没有关系。

* 该对象为全局对象,通常创建单例使用。一个系统中可以创建多个,如:MySQL引擎、Oracle引擎等。

* 在数据采集系统中会存在许多数据源,因此建议实现类中增加数据连接的缓存器来管理这些链接。 * @author shikeying * @date 2015年12月18日 * */ public interface DatabaseMetaEngine { /** * 返回表中字段对象集合 * @param address * @param tableName * @return */ public List getFieldsObject(Address address, String tableName); /** * 返回表中所有字段集合 * @param address 连接的数据库地址 * @param tableName 查询的表名 * @return */ List getFields(Address address, String tableName); /** * 返回该地址数据库中存在的表数量 * @param address * @return */ int getTableSize(Address address); /** * 返回给定表集合中,每个表的概要数据量(行数)。
* 该数据是从数据库元数据表中查询的值,只是一个参考结果。 * @param address * @param tableNameList * @return map<tableName, rows> */ Map getTableRows(Address address, List tableNameList); /** * 返回给定的表当前记录数 * @param address * @param tableName * @return */ long getTableRow(Address address, String tableName); List> loadTableDatas(Address address, String tableName, String sql); List getTableNamesByLike(Address address, String tableNameLike); /** * 分页查询给定名字前缀的表集合(只包含表名) * @param address * @param tableNameLike * @return */ GenericPager queryPageTableNamesByLike(Address address, String tableNameLike // , int pageIndex, int pageSize ); /** * 初始化,创建该对象后必须首先调用该方法。 */ void initialize(); /** * 使用完该对象,必须调用该方法销毁 */ void destroy(); /** * 动态创建表结果,可能是关系数据库,也可能是NoSQL数据库类型。

* 给定一个数据集合,从中分析数据类型,生成简单的存储表。
* 因为这个是在数据采集时使用,所以目前仅支持三种数据类型:string|long|double * @param address 目的地址 * @param datas 给定的数据集合 * @param dataVersionField 数据版本字段名称,该字段用来增量采集数据对比,通常是数值类型。 * @param tableName 要创建的表名称 * @throws DatabaseException 创建失败,抛出异常 */ void createTableDynamic(Address address , List> datas, String dataVersionField, String tableName) throws DatabaseException; /** * 直接设置连接器对象,不再调用方法:initialize() * @param connector */ void setConnector(DatabaseConnector connector); DatabaseConnector getConnector(); }