public interface DatabaseDialect
Modifier and Type | Method and Description |
---|---|
void |
accept(DBMetaData db)
初始化方言,根据JDBC接口进一步嗅探出数据库版本和JDBC驱动信息,从而让方言更加适配数据库操作。
当有一个数据库实例连接初次创建时调用.
|
boolean |
containKeyword(String name)
检查数据库是否包含指定的关键字,用来进行检查的对象名称都是按照getColumnNameIncase转换后的,因此对于大小写统一的数据库,
这里无需考虑传入的大小写问题。
|
String |
generateUrl(String host,
int port,
String pathOrName)
生成数据库连接字串
|
String |
getCatlog(String schema)
像Oracle,其Catlog是不用的,那么返回null mySQL没有Schema,每个database是一个catlog,那么返回值
同时修正返回的大小写
|
String |
getColumnNameToUse(ColumnMapping name)
获得大小写正确的列名
|
String |
getDefaultSchema()
不同数据库登录后,所在的默认schema是不一样的
Oracle是以登录的用户名作为schema的。
mysql是只有catlog不区分schema的。
derby支持匿名访问,此时好像是位于APP这个schema下。
SQL Server默认是在dbo这个schema下
因此对于无法确定当前schema的场合,使用这里提供的schema名称作为当前schema |
String |
getDriverClass(String url)
获取数据库的默认驱动类
|
int |
getImplementationSqlType(int sqlType)
得到该数据库上该种数据类型的真实实现类型。
比如,在不支持boolean类型的数据库上,会以char类型代替boolean;在不支持blob的数据库上,会以varbinary类型代替blob
|
String |
getName()
得到RDBMS的名称
|
String |
getObjectNameToUse(String name)
Oracle会将所有未加引号的数据库对象名称都按照大写对象名来处理,MySQL则对表名一律转小写,列名则保留原来的大小写。
为了体现这一数据库策略的不同,这里处理大小写的问题。
|
String |
getProperty(DBProperty key)
返回指定的属性(文本)
|
String |
getProperty(DBProperty key,
String defaultValue)
返回指定的属性(文本)
|
int |
getPropertyInt(DBProperty key)
返回指定特性(数值),如果无值返回0
|
long |
getPropertyLong(DBProperty key)
返回指定数据库特性(数值),如果无值返回0
|
String |
getSchema(String schema)
对于表名前缀的XX.
|
String |
getSqlDateExpression(Date value)
针对非绑定变量SQL,生成SQL语句所用的文本值。 Java -> SQL String
|
String |
getSqlTimeExpression(Date value)
针对非绑定变量SQL,生成SQL语句所用的文本值。 Java -> SQL String
|
String |
getSqlTimestampExpression(Date value)
针对非绑定变量SQL,生成SQL语句所用的文本值。 Java -> SQL String
|
boolean |
has(Feature feature)
判断数据库是否支持某项特性
|
boolean |
isCaseSensitive()
数据库对象是否为大小写敏感的
一般来说对应引号中的表名列名都是大小写敏感的。此处仅指没有引号的情况下是否大小写敏感
|
boolean |
isIOError(SQLException se)
当出现异常时,使用此方法检查这个异常是否因为网络连接异常引起的。
|
boolean |
notHas(Feature feature)
判断数据库是否不支持某项特性
|
void |
parseDbInfo(ConnectInfo connectInfo)
根据 JDBC的URL,解析出其中的dbname,host,user等信息。目的是为了在不必连接数据库的情况下,得到数据库名称
|
String |
toDefaultString(Object defaultValue,
int sqlType)
将表达式或值转换为文本形式的缺省值描述
|
Timestamp |
toTimestampSqlParam(Date timestamp)
当使用Timestamp类型的绑定变量操作时,转换为什么值
|
String getName()
int getImplementationSqlType(int sqlType)
sqlType
- String toDefaultString(Object defaultValue, int sqlType)
defaultValue
- sqlType
- boolean notHas(Feature feature)
feature
- boolean has(Feature feature)
feature
- String getCatlog(String schema)
schema
- String getSchema(String schema)
schema
- String getDriverClass(String url)
url
- Derby根据连接方式的不同,会有两种不同的DriverClass,因此需要传入urlString generateUrl(String host, int port, String pathOrName)
host
- <=0则会使用默认端口port
- pathOrName
- String getObjectNameToUse(String name)
目前的原则是:凡是涉及 schema/table/view/sequence/dbname等转换的,都是用此方法,凡是设计列名转换,列别名定义的都用
name
- String getColumnNameToUse(ColumnMapping name)
name
- boolean containKeyword(String name)
name
- Timestamp toTimestampSqlParam(Date timestamp)
timestamp
- java.util.Dateboolean isIOError(SQLException se)
一种办法是当从连接池获得每个连接都对连接进行检查,这种检查必需是通过网络通信的检查,因为此时如果调用 Connection.isClosed()会正常返回false, 因此这种检查就显得额外占开销,在高并发的OLTP中并不经济。 因此试图实现一种更为有效的检查方式,即当任何数据库操作出现错误,并且这个错误是由连接IO引起,那么都要对连接池立刻进行清洗和检查,用这种触发机制来保证连接池的高效。
se
- 异常void parseDbInfo(ConnectInfo connectInfo)
connectInfo
- String getProperty(DBProperty key)
key
- 特性名称String getProperty(DBProperty key, String defaultValue)
key
- 特性名称defaultValue
- 缺省值int getPropertyInt(DBProperty key)
key
- 特性名称long getPropertyLong(DBProperty key)
key
- 特性名称String getDefaultSchema()
String getSqlDateExpression(Date value)
String getSqlTimeExpression(Date value)
String getSqlTimestampExpression(Date value)
void accept(DBMetaData db)
db
- boolean isCaseSensitive()
Copyright © 2020. All rights reserved.