All Downloads are FREE. Search and download functionalities are using the official Maven repository.

sf.database.dialect.IDBDialect Maven / Gradle / Ivy

The newest version!
package sf.database.dialect;

import sf.database.dbinfo.Feature;
import sf.database.meta.ColumnMapping;
import sf.database.support.DBMS;
import sf.jooq.JooqSupportDatabase;
import sf.querydsl.QueryDSLSupportDatabase;

import java.sql.Connection;

public interface IDBDialect {
    /**
     * @return 当前数据库类型,名称参见 DB 这个枚举类型
     * @see DBMS
     */
    String getName();

    /**
     * @return 当前数据库编号,名称参见 DB 这个枚举类型,自定义的不可和DB 枚举冲突
     */
    int getNumber();

    /**
     * 判断数据库是否不支持某项特性
     * @param feature
     * @return
     */
    boolean notHas(Feature feature);

    /**
     * 判断数据库是否支持某项特性
     * @param feature
     * @return
     */
    boolean has(Feature feature);

    /**
     * 像Oracle,其Catlog是不用的,那么返回null mySQL没有Schema,每个database是一个catlog,那么返回值
     * 同时修正返回的大小写
     * @param catalog
     * @return
     */
    String getCatalog(String catalog);

    /**
     * 对于表名前缀的XX. MYSQL是作为catlog的,不是作为schema的 同时修正返回的大小写
     * @param schema
     * @return
     */
    String getSchema(String schema);

    /**
     * 获取数据库的默认驱动类
     * @param url Derby根据连接方式的不同,会有两种不同的DriverClass,因此需要传入url
     * @return 驱动类
     */
    String getDriverClass(String url);

    /**
     * 检查数据库是否包含指定的关键字,用来进行检查的对象名称都是按照getColumnNameIncase转换后的,因此对于大小写统一的数据库,
     * 这里无需考虑传入的大小写问题。
     * @param name
     * @return
     */
    boolean containKeyword(String name);

    /**
     * Oracle会将所有未加引号的数据库对象名称都按照大写对象名来处理;MySQL则对表名一律转小写,列名则保留原来的大小写。
     * 为了体现这一数据库策略的不同,这里处理大小写的问题。
     * 

* 目前的原则是:凡是涉及 * schema/table/view/sequence/dbname等转换的,都是用此方法,凡是涉及列名转换,列别名定义的都用 * {@link #getColumnNameToUse}方法 * @param name * @return */ String getObjectNameToUse(String name); /** * 获得大小写正确的列名 * @param name * @return */ String getColumnNameToUse(ColumnMapping name); long getColumnAutoIncreamentValue(ColumnMapping mapping, Connection db); /** * 不同数据库登录后,所在的默认schema是不一样的 *

    *
  • Oracle是以登录的用户名作为schema的。
  • *
  • mysql是只有catlog不区分schema的。
  • *
  • derby支持匿名访问,此时好像是位于APP这个schema下。
  • *
  • SQL Server默认是在dbo这个schema下
  • *
*
因此对于无法确定当前schema的场合,使用这里提供的schema名称作为当前schema * @return 当前RDBMS的缺省Schema */ String getDefaultSchema(); /** * 初始化方言,根据JDBC接口进一步嗅探出数据库版本和JDBC驱动信息,从而让方言更加适配数据库操作。 * 当有一个数据库实例连接初次创建时调用. Dialect可以通过直接连接数据库判断版本、函数等,调整Dialect内部的一些配置和数据。 * @param conn */ void accept(Connection conn); /** * 数据库对象是否为大小写敏感的 * 一般来说对应引号中的表名列名都是大小写敏感的。此处仅指没有引号的情况下是否大小写敏感 * @return */ boolean isCaseSensitive(); default String getQueryDslDialect() { return QueryDSLSupportDatabase.SQLDEFAULT; } default String getJooqDialect() { return JooqSupportDatabase.DEFAULT; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy