🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 多库之间的不同 可能你会疑惑,JDBC已经规范访问数据库的方式,为什么还需要BeetlSQL来规范。这是因为不同数据库,对JBDC的实现并不完全一样,而且,对SQL的的实现也不一定一样。在完成数据库集成的时候,需要考虑如下问题 * 数据库的jdbc是否支持PreparedStatement,大部分数据库支持,但有的数据库只支持Statement,比如Drill,Druid,Presto,因此,需要BeetlSQL在这些情况下,使用Statement来作为底层执行接口 * 数据库是否支持Metadata,如果支持,数据库框架可以得到数据库和表定义,大部分都支持。Drill 不支持(比如查询目标是个文件),TD-Engine是支持的,但目前版本获取Metadata会报错,也认为不支持。因此,需要BeetlSQL提供接口添加metadata信息 * 数据库支持序列,但使用方式不一样,比如,Oralce是xxx..nextval,而Postgres是nextval('xxxx') * 数据库是否支持update操作,SQL查询引擎是不支持的,因此需要屏蔽内置的更新SQL语句 * 数据库的翻页语句是否一样,大部分都不相同,都需要实现Range接口,然而,有些数据库是类似的,可以重用,比如OffsetLimitRange作为Range的实现类,可以为Mysql,大梦,TD-Engine,H2,Clickhouse,SqlLite使用 * 数据库JDBC驱动对日期字段是否支持,由于Java的日期类型比较多,传统数据可能会兼容java.util.Date,以及JDK后的LocalDate,LocalDateTime, 但也可能不兼容,BeelSQL框架提供了TypeHandler来负责实现这种转化 * 数据库JDBC对特殊字段是否支持,比如JSON,XML等,由于这两种类型并不是java规范,比如json实现有fastjson、jackson,因此需要TypeHandler来实现这种转化,把这些类型转化为数据库对应的类型 * 数据库对主键支持情况。越来越多的应用使用uuid、snowflake等分布式id来作为数据表主键,也有传统应用使用自增主键和数据库序列,比如Mysql自增,DB2和Postgres或者同时兼容两种。 * SQL查询引擎,如Presto,不支持insert,update语句