<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## 跨庫支持實現 如果BeetlSQL 目前不支持你所用的數據庫,可以自己輕松擴展實現。主要的核心類是 * DbStyle * BeanProcessor 首先,先看看數據庫跟哪些數據庫比較接近或者兼容,比如很多云數據庫都有傳統數據庫的影子,因此,你可以嘗試使用傳統數據庫的DBStyle,比如阿里云云數據庫兼容MySQL。因此,完全可以使用MySqlStyle,華為開源高斯數據庫類似Postgres。 其次,新興的數據庫都有傳統數據庫的影子,比如翻頁,大部分都是`limit ${offset}, ${limit}` , 比如mysql,因此可以用復用類`OffsetLimitRange` ;有的數據庫則是`limit ${limit} offset ${offset}` ,比如apache drill,couchbase,apache ignite,還有國產TD-Engine, 這時候可以復用`LimitWithOffsetRange`。 有的數據庫翻頁類似Oralce,因此可以復用`RowNumRange`,比如國產數據庫達夢 實現XXX數據庫基本上只要是實現XXXStyle,繼承AbstractDbStyle,AbstractDbStyle的一些核心方法是BeetlSQL解決不同數據庫差異的主要類,這些方法將在本章后面詳細簡介,現在簡單說明如下 ```java @Override public String getName() { return "mysql"; } @Override public int getDBType() { return DBType.DB_MYSQL; } ``` getName 返回數據庫名稱,getDBType則返回一個唯一標識,可以返回1000以外。數據庫名稱可以用于各種特殊處理。數據庫sql文件也可以存放在以數據庫名稱作為目錄名下,以實現跨數據庫操作。 ```java @Override public RangeSql getRangeSql() { return this.rangeSql; } ``` 返回一個翻頁輔助類,這將在后面詳細講解。這也是大部分數據庫的差異點 對于NOSQL或者查詢引擎來說,還有需要考慮的地方,以Presto為例子 ```java @Override public boolean isNoSql(){ return true; } public boolean preparedStatementSupport(){ return false; } @Override public String wrapStatementValue(Object value){ return super.wrapStatementValue(value); } @Override public SQLExecutor buildExecutor(ExecuteContext executeContext){ return new QuerySQLExecutor(executeContext); } ``` `isNoSql` 返回true,表示是非傳統數據庫。 `preparedStatementSupport` 返回false,表示數據庫jdbc 不支持預編譯,因此BeetlSQL將使用Statement而不是PreparedStatement,并會調用`wrapStatementValue`來動態構造sql buildExecutor 實際上構造了BeetlSQL的執行核心,這里返回QuerySQLExecutor而不是默認的BaseSQLExecutor,因為QuerySQLExecutor只保留了查詢支持 有些數據庫對MetaData支持不夠友好,比如某些查詢數據庫查詢文件,因此需要代碼添加對“表”的描述,DBStyle需要重載initMetadataManager ```java @Override public MetadataManager initMetadataManager(ConnectionSource cs){ metadataManager = new NoSchemaMetaDataManager(); return metadataManager; } ``` NoSchemaMetaDataManager 類提供了addBean方法用于通過POJO提供一個表描述,這樣才能保證BeetlSQL的代碼能執行。 AbstractStyle 還支持config(SQLManager sqlManager),有機會配置sqlManager ```java @Override public void config(SQLManager sqlManager){ } ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看