久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

基于 JDBC 元數(shù)據(jù)接口的表結(jié)構(gòu)獲取:達(dá)夢數(shù)據(jù)庫實戰(zhàn)

基于 JDBC 元數(shù)據(jù)接口的表結(jié)構(gòu)獲?。哼_(dá)夢數(shù)據(jù)庫實戰(zhàn) 1. 整體設(shè)計為什么用 JDBC 元數(shù)據(jù)接口1.1 先理清需求你要拿到的“表結(jié)構(gòu)信息”到底是什么如果你只是隨口說要“獲取表結(jié)構(gòu)”可能有兩種完全不同的訴求。一種是運維人員想快速看一張表有哪些字段直接執(zhí)行幾條查詢在客戶端里看一眼就完了另一種是開發(fā)要做一個功能模塊比如數(shù)據(jù)字典、元數(shù)據(jù)采集、ORM映射、代碼生成器需要程序化地拿到“表清單—字段—類型—注釋—主鍵”這套結(jié)構(gòu)化信息并且要穩(wěn)定、可重復(fù)執(zhí)行。我之前遇到的場景就是這種某個數(shù)據(jù)中臺項目要把業(yè)務(wù)庫的元數(shù)據(jù)采集到中臺里后續(xù)要同步字段血緣、自動生成測試數(shù)據(jù)、給前端數(shù)據(jù)字典頁面做展示。第一個接入的庫就是達(dá)夢數(shù)據(jù)庫。這個場景下一次性腳本是撐不住的必須做一套可復(fù)用的取數(shù)邏輯于是核心問題就變成了這段代碼怎么設(shè)計才能既兼容達(dá)夢又盡量不鎖死在某一種數(shù)據(jù)庫上。還有一個容易忽略的點字段明細(xì)、類型、長度、精度、是否可空、默認(rèn)值、注釋、主鍵、外鍵這些是常規(guī)信息但一旦落到達(dá)夢上還會引出許多附加問題。比如達(dá)夢支持定義模式下的大寫表名、小寫表名、加引號保留原始大小寫不同用戶訪問同一個表schema 歸屬可能不同注釋可能存在 COMMENT 語句里也可能需要走系統(tǒng)視圖。這些細(xì)節(jié)在設(shè)計數(shù)據(jù)模型時就得先想清楚否則寫出來的代碼只能對付最簡單的 demo稍微換個環(huán)境就各種查不到。1.2 三條技術(shù)路線為什么我傾向 DatabaseMetaData要程序化拿表結(jié)構(gòu)通常有三條路。第一條是查系統(tǒng)表或系統(tǒng)視圖。達(dá)夢的系統(tǒng)視圖有 ALL_TABLES、USER_TABLES、ALL_TAB_COLUMNS、ALL_CONSTRAINTS 這些再深入一點還有 DBA_TABLES。MySQL 則是 information_schema.TABLES、information_schema.COLUMNS。問題一目了然每個數(shù)據(jù)庫的系統(tǒng)表長得不一樣換個庫就要重寫一堆 SQL。更麻煩的是達(dá)夢還有多種兼容模式不同模式下系統(tǒng)視圖的暴露情況不同直接查系統(tǒng)表的代碼很容易出現(xiàn)環(huán)境依賴。第二條路是寫一層“數(shù)據(jù)庫方言適配器”每種數(shù)據(jù)庫實現(xiàn)一套查詢邏輯最后統(tǒng)一對外輸出。很多代碼生成器就是這么做的。優(yōu)點是可控性強(qiáng)可以拿到自增序列、分區(qū)信息這類特殊內(nèi)容缺點是維護(hù)成本高每接一個庫都要寫一套映射而且系統(tǒng)視圖在不同版本之間還會有字段差異。如果團(tuán)隊只維護(hù)一個庫這條路很香如果明確要多庫支持就需要斟酌。第三條路就是我用到的方案直接走 JDBC 標(biāo)準(zhǔn)規(guī)范里的 DatabaseMetaData 接口。JDBC 規(guī)范中定義了 getTables、getColumns、getPrimaryKeys、getImportedKeys 等方法各個數(shù)據(jù)庫驅(qū)動廠商只要遵循標(biāo)準(zhǔn)就會把這些方法實現(xiàn)到本庫的系統(tǒng)表之上。達(dá)夢的 JDBC 驅(qū)動DmJdbcDriver.jar也實現(xiàn)了這些方法。選它作為主干最大的好處是同一份代碼在絕大多數(shù)關(guān)系型數(shù)據(jù)庫上可以直跑遇到個別細(xì)節(jié)問題再針對達(dá)夢做少量補償。有人會質(zhì)疑元數(shù)據(jù)接口的性能。我的實測經(jīng)驗是在幾千張表、幾萬個字段的規(guī)模下通過 JDBC 元數(shù)據(jù)接口讀取耗時在幾十秒到兩三分鐘這個量級完全能接受。相比之下寫幾十個精心優(yōu)化的系統(tǒng)表查詢省出來的時間并不多而且通用性帶來的收益通常遠(yuǎn)超這幾分鐘的開銷。1.3 達(dá)夢的“兼容”與“不兼容”達(dá)夢數(shù)據(jù)庫有一個顯著特點它提供 Oracle 兼容模式很多語法、數(shù)據(jù)類型、系統(tǒng)視圖命名都向 Oracle 靠攏。這也導(dǎo)致一個常見誤區(qū)——默認(rèn)達(dá)夢和 Oracle 完全一致直接把 Oracle 那套代碼搬過來就完事。實際上達(dá)夢的 JDBC 驅(qū)動在元數(shù)據(jù)行為上和 Oracle 驅(qū)動有不少差異。最典型的是模式名Schema的處理。達(dá)夢在用戶登錄后默認(rèn)模式一般就是用戶名對應(yīng)的模式但如果配置了“模式名與用戶名不一致”或者用高權(quán)限用戶連接而你要讀的是別人名下的表那調(diào)用 getTables 時catalog 和 schema 參數(shù)怎么傳就特別講究。達(dá)夢驅(qū)動有時候會把 catalog 和 schema 混在一起處理你只傳 schema 不傳 catalog結(jié)果可能為空你把 schema 當(dāng) catalog 傳返回結(jié)果又可能出乎意料。我調(diào)試最久的就集中在這一塊。另一個特殊點是大小寫。達(dá)夢默認(rèn)把不帶引號的表名、字段名轉(zhuǎn)成大寫存儲但建表時加了雙引號名稱會保留原始大小寫。JDBC 元數(shù)據(jù)接口做匹配時getTables 的 tableNamePattern 參數(shù)是按數(shù)據(jù)庫內(nèi)部存儲的字符串去匹配的。也就是說你拿小寫字符串去匹配一個默認(rèn)創(chuàng)建的大寫表名很可能匹配不上。這個問題直接影響了后面所有查詢邏輯我放到 2.4 節(jié)專門講。2. 核心實現(xiàn)把“通用”做扎實的分層設(shè)計2.1 統(tǒng)一數(shù)據(jù)模型先行在寫讀表邏輯之前先要把結(jié)果的數(shù)據(jù)結(jié)構(gòu)定義好。所謂“通用”不是說不考慮數(shù)據(jù)庫差異而是先把差異擋在模型外面上層拿到的東西保持一致。我當(dāng)時設(shè)計了四個基礎(chǔ)模型TableInfo表名、表類型、所屬 schema、注釋、是否視圖等基礎(chǔ)屬性。ColumnInfo字段名、JDBC 類型碼、數(shù)據(jù)庫原生類型字符串、長度、精度、是否可空、默認(rèn)值、注釋、字段序號。PrimaryKeyInfo主鍵名、主鍵字段集合、聯(lián)合主鍵中每個字段的順序。這個順序很關(guān)鍵聯(lián)合主鍵順序錯了生成索引 DDL 時會出問題。ImportedKeyInfo外鍵信息包含外鍵表名、外鍵字段、引用表名、引用字段、更新規(guī)則、刪除規(guī)則。要注意一點模型里不要只存數(shù)據(jù)庫原生類型字符串。因為達(dá)夢返回的 typeName 可能是 VARCHAR、VARCHAR2、NVARCHAR2 這樣五花八門的值。比較類型時優(yōu)先用 dataType 這個 JDBC 類型碼再結(jié)合實際長度做判斷。比如判斷“字符串類型”不能只檢查 typeName 是不是 varchar應(yīng)該看 getColumnType() 返回的是 Types.VARCHAR 還是 Types.NVARCHAR再結(jié)合長度做后續(xù)分支。模型字段宜多不宜少。我吃過虧最初只設(shè)計了列名和類型后面數(shù)據(jù)字典頁面需要展示默認(rèn)值和自增標(biāo)志又回來改模型。元數(shù)據(jù)采集這種功能一次把模型定義寬一點后面省很多事。2.2 讀取層用 DatabaseMetaData 串起所有信息核心代碼不多重點在于理解每一次調(diào)用的參數(shù)。我寫一個不依賴數(shù)據(jù)庫特性的類內(nèi)部持有 Connection通過 connection.getMetaData() 拿到 DatabaseMetaData 對象然后逐層讀取。獲取表清單的核心方法如下public ListTableInfo listTables(Connection conn, String schemaPattern, String tableNamePattern) throws SQLException { ListTableInfo tables new ArrayList(); DatabaseMetaData metaData conn.getMetaData(); ResultSet rs metaData.getTables( conn.getCatalog(), // catalog達(dá)夢一般傳 null 或者當(dāng)前庫 schemaPattern, // schema傳模式名支持 % 通配符 tableNamePattern, // 表名模式支持 % 通配符 new String[]{TABLE, VIEW} // 只取表和視圖 ); while (rs.next()) { TableInfo info new TableInfo(); info.setTableCat(rs.getString(TABLE_CAT)); info.setTableSchema(rs.getString(TABLE_SCHEM)); info.setTableName(rs.getString(TABLE_NAME)); info.setTableType(rs.getString(TABLE_TYPE)); info.setRemarks(rs.getString(REMARKS)); tables.add(info); } rs.close(); return tables; }這里有一個關(guān)鍵參數(shù)策略達(dá)夢下catalog 參數(shù)到底傳什么。我實測下來最穩(wěn)的做法是 catalog 傳 nullschema 傳要查詢的模式名。部分版本的達(dá)夢驅(qū)動會把 catalog 當(dāng)成 Oracle 的實例名處理傳了反而查不到結(jié)果。而 schema 傳大寫模式名返回最穩(wěn)定。如果拿不準(zhǔn)模式名的大小寫可以先傳一個 % 通配符拿到當(dāng)前用戶可見的所有模式再從中過濾。然后是字段信息public ListColumnInfo listColumns(Connection conn, String schemaPattern, String tableName) throws SQLException { ListColumnInfo columns new ArrayList(); DatabaseMetaData metaData conn.getMetaData(); ResultSet rs metaData.getColumns(conn.getCatalog(), schemaPattern, tableName, %); while (rs.next()) { ColumnInfo col new ColumnInfo(); col.setColumnName(rs.getString(COLUMN_NAME)); col.setDataType(rs.getInt(DATA_TYPE)); col.setTypeName(rs.getString(TYPE_NAME)); col.setColumnSize(rs.getInt(COLUMN_SIZE)); col.setDecimalDigits(rs.getInt(DECIMAL_DIGITS)); col.setNullable(rs.getInt(NULLABLE)); col.setRemarks(rs.getString(REMARKS)); col.setOrdinalPosition(rs.getInt(ORDINAL_POSITION)); col.setDefaultValue(rs.getString(COLUMN_DEF)); columns.add(col); } rs.close(); return columns; }在達(dá)夢下getColumns 返回的 IS_AUTOINCREMENT 列也支持它返回 YES 或 NO可以用來判斷自增字段。不過有些版本的驅(qū)動在這列取值上不穩(wěn)定更嚴(yán)謹(jǐn)?shù)淖龇ㄊ悄孟到y(tǒng)視圖 ALL_TAB_COLUMNS 中 IDENTITY 相關(guān)字段做補充確認(rèn)。這就是典型的“通用代碼 方言補償”配合通用主干保持干凈方言細(xì)節(jié)藏在補償分支里。主鍵讀取public PrimaryKeyInfo getPrimaryKey(Connection conn, String schemaPattern, String tableName) throws SQLException { PrimaryKeyInfo pk new PrimaryKeyInfo(); ListString pkColumns new ArrayList(); DatabaseMetaData metaData conn.getMetaData(); ResultSet rs metaData.getPrimaryKeys(conn.getCatalog(), schemaPattern, tableName); while (rs.next()) { pk.setPkName(rs.getString(PK_NAME)); pkColumns.add(rs.getString(COLUMN_NAME)); // KEY_SEQ 表示聯(lián)合主鍵中的順序必須記錄起來之后排序 } rs.close(); pk.setColumns(pkColumns); return pk; }主鍵這里有個容易被忽略的問題返回的 ResultSet 不保證按 KEY_SEQ 排序。你需要先把 KEY_SEQ 一起讀進(jìn)內(nèi)存然后對列排序否則聯(lián)合主鍵的列順序是隨機(jī)的。我后面實操時真遇上了第一次生成的 DDL 里聯(lián)合主鍵順序是反的。2.3 類型映射先判 JDBC 類型碼再看原生類型通用代碼搭起來之后馬上會遇到第一個跨庫不一致點類型映射。我建議用一個獨立方法把 JDBC 類型碼轉(zhuǎn)換成語義明確的邏輯類型public static String mapJdbcType(int jdbcType, String typeName, int size, int decimalDigits) { switch (jdbcType) { case Types.INTEGER: case Types.SMALLINT: case Types.TINYINT: return int; case Types.BIGINT: return long; case Types.VARCHAR: case Types.NVARCHAR: return String; case Types.DECIMAL: case Types.NUMERIC: return decimal; case Types.DATE: return Date; case Types.TIMESTAMP: return Timestamp; case Types.CLOB: return text; case Types.BLOB: return binary; default: return typeName; } }關(guān)鍵點在順序和優(yōu)先級。先看 JDBC 類型碼再看原生類型名。達(dá)夢里 DECIMAL(10,2) 的 JDBC 類型碼是 Types.DECIMALNUMBER 類型有時候返回 Types.NUMERIC有時候返回 Types.DECIMAL兩個 case 都要處理否則代碼生成會漏分支。注釋讀取也有一個細(xì)節(jié)JDBC 元數(shù)據(jù)接口的 REMARKS 字段在達(dá)夢上能返回通過 COMMENT ON 語句寫入的備注建表時指定了字段注釋也能正常返回。如果你需要的不只是簡單的字段注釋而是表級注釋甚至更復(fù)雜的說明getTables 的 REMARKS 可能不夠用。我當(dāng)時的做法是表級注釋先用 REMARKS信息不全時再查 ALL_TAB_COMMENTS 做一輪補償。補償查詢務(wù)必限定在某個 schema 下否則多用戶模式下會查到別人表里的注釋。2.4 大小寫策略達(dá)夢里最容易被忽略的問題在達(dá)夢上表名和模式名的匹配規(guī)則與建表時的寫法直接相關(guān)。默認(rèn)情況下不帶雙引號的名稱會被轉(zhuǎn)成大寫存儲。所以庫里的表名通過 getTables 返回的通常是 BUY_ORDER_DETAIL 這種全大寫。如果你的應(yīng)用層習(xí)慣用駝峰命名 buyOrderDetail直接拿這個名字做 pattern 去匹配是匹配不到的。我在設(shè)計通用代碼時加了一個策略開關(guān)是否對入?yún)⒈砻鼋y(tǒng)一轉(zhuǎn)大寫處理。針對達(dá)夢默認(rèn)開啟“無引號名稱轉(zhuǎn)大寫”的預(yù)處理而在 MySQL 這類存儲時保留大小寫的庫上這個開關(guān)必須關(guān)閉。實現(xiàn)不復(fù)雜在調(diào)用 getTables 和 getColumns 之前做一次規(guī)范化private String normalizeName(String name, boolean upperCaseStrategy) { if (name null) return null; if (upperCaseStrategy) { return name.toUpperCase(); } return name; }這里還有更深一層的問題如果用戶建表時用了雙引號比如 create table BuyOrderDetail存儲名稱就是混合大小寫直接轉(zhuǎn)大寫反而匹配不上。所以更穩(wěn)的做法是先查一遍表清單把實際表名集合加載到內(nèi)存應(yīng)用層再做一次不區(qū)分大小寫的匹配找到真實表名后再傳給 getColumns。雖然多查詢一次但換來了穩(wěn)定。這個方案通用性最好。我最終保留了兩層匹配邏輯第一層用規(guī)范后的名字直接查第二層查不到時把當(dāng)前 schema 下的表清單全量拉出來做不區(qū)分大小寫匹配找到真實表名后再去取列。這段邏輯對上層完全透明在達(dá)夢上靠它救了不少場景。3. 實操過程在達(dá)夢上完整跑通這套代碼3.1 步驟一驅(qū)動、連接與版本確認(rèn)達(dá)夢的 JDBC 驅(qū)動引用不復(fù)雜驅(qū)動類是 dm.jdbc.driver.DmDriver連接 URL 形如 jdbc:dm://192.168.x.x:5236/數(shù)據(jù)庫名。驅(qū)動包通常是 DmJdbcDriver.jar不同版本內(nèi)部類名基本穩(wěn)定。連接參數(shù)里第一個要關(guān)注的坑是字符集。有的部署環(huán)境客戶端字符集和數(shù)據(jù)庫服務(wù)端不一致會導(dǎo)致元數(shù)據(jù)查詢返回的字符串出現(xiàn)亂碼。建議在連接串里顯式指定字符集設(shè)置或者通過應(yīng)用側(cè)的連接配置來控制。具體寫法依驅(qū)動版本略有差異穩(wěn)妥的做法是先看官方連接參數(shù)說明確認(rèn)支持哪些字符集參數(shù)再配置到連接池里。初次接入時強(qiáng)烈建議先寫一個獨立測試類把數(shù)據(jù)庫版本和驅(qū)動版本打印出來DatabaseMetaData md conn.getMetaData(); System.out.println(md.getDatabaseProductName()); System.out.println(md.getDatabaseProductVersion()); System.out.println(md.getDriverName()); System.out.println(md.getDriverVersion());這一步值得做。它會直接告訴你驅(qū)動對應(yīng)的兼容行為和版本后面遇到怪問題時版本信息是排查的重要依據(jù)。3.2 步驟二把表清單打印出來用前面的 listTables 方法在達(dá)夢實例上跑一次。我的測試過程是先用當(dāng)前登錄用戶默認(rèn) schema 查詢能正常返回一批表接著切換到另一個業(yè)務(wù)用戶模式查詢這時需要把 schemaPattern 參數(shù)傳成對應(yīng)的大寫模式名否則結(jié)果為空。輸出樣例大致是下面這種形式TABLE_SCHEMADMUSER1, TABLE_NAMEBUY_ORDER_DETAIL, TYPETABLE, REMARKS訂單明細(xì)表 TABLE_SCHEMADMUSER1, TABLE_NAMEPRODUCT_CATEGORY, TYPEVIEW, REMARKS商品分類視圖如果 REMARKS 返回空先別急著懷疑代碼。到數(shù)據(jù)庫客戶端里執(zhí)行一句SELECT * FROM ALL_TAB_COMMENTS WHERE TABLE_NAME BUY_ORDER_DETAIL;看看能不能查到表注釋。如果這里也是空說明表本身就沒寫注釋代碼邏輯再對也撈不到內(nèi)容。3.3 步驟三讀取列信息、主鍵、默認(rèn)值與自增列信息是整個模塊的核心。測試時我特意找了兩張表一張是普通流水表字段有十來個類型覆蓋 DATE、VARCHAR2、DECIMAL、NUMBER、CLOB另一張是帶聯(lián)合主鍵、帶自增列、帶外鍵的配置表。第一張表遍歷結(jié)果非常正常類型碼、長度、小數(shù)位數(shù)都按預(yù)期返回。第二張表的聯(lián)合主鍵出了問題getPrimaryKeys 返回的主鍵列順序是亂的KEY_SEQ 有 1、2也有 2、1。我在代碼里補上排序邏輯后解決。自增列的判斷更值得記錄。同一張自增表里自增列在 getColumns 中返回的 IS_AUTOINCREMENT 字段在某些達(dá)夢版本里是 YES某些版本里是空。后來我用這種備用 SQL 做補償SELECT COLUMN_NAME FROM ALL_TAB_IDENTITY_COLS WHERE OWNER UPPER(?) AND TABLE_NAME UPPER(?)這是很典型的思路當(dāng) JDBC 元數(shù)據(jù)拿不到 100% 準(zhǔn)確的細(xì)節(jié)時用目標(biāo)數(shù)據(jù)庫的系統(tǒng)視圖做定向補償補償代碼用配置開關(guān)隔離盡量不讓通用主干混入方言邏輯。3.4 步驟四生成一份可執(zhí)行的 DDL 語句讀完元數(shù)據(jù)后最直接的驗證方法是把它反向生成建表語句。這也是判斷代碼是否“真正讀對了”的硬標(biāo)準(zhǔn)。我寫了一個簡易生成器對每個字段拼出名稱、類型、長度、默認(rèn)值、注釋最后拼主鍵約束。生成過程中遇到兩個達(dá)夢專屬問題。第一個是類型長度拼接。VARCHAR 類型需要長度NUMBER 類型需要精度和小數(shù)位但 CLOB、BLOB、DATE 這些類型不需要。如果統(tǒng)一模板處理就會出現(xiàn) date(0)、clob(0) 這種錯誤。解決方式是在拼 SQL 時判斷 dataTypeif (col.getDataType() Types.VARCHAR || col.getDataType() Types.NVARCHAR) { sb.append(col.getTypeName()).append(().append(col.getColumnSize()).append()); } else if (col.getDataType() Types.DECIMAL || col.getDataType() Types.NUMERIC) { if (col.getDecimalDigits() 0) { sb.append(col.getTypeName()).append(() .append(col.getColumnSize()).append(,) .append(col.getDecimalDigits()).append()); } else { sb.append(col.getTypeName()).append(().append(col.getColumnSize()).append()); } } else { sb.append(col.getTypeName()); }第二個是表名大小寫。建表語句如果沒加雙引號達(dá)夢會直接把表名轉(zhuǎn)大寫但如果原表是用雙引號建的混合大小寫表名生成的 DDL 里去掉了引號就會導(dǎo)致重建出來的表名和原表不一致。所以我生成的 DDL 對表名、字段名默認(rèn)都加雙引號。這個做法驗證下來最穩(wěn)代價是數(shù)據(jù)庫里所有對象名稱都會被嚴(yán)格固定成引號內(nèi)的大小寫。4. 常見問題與坑位總結(jié)4.1 常見問題速查表我把實際操作中最常撞上的問題整理成了一張速查表后面再挑幾個展開細(xì)說。現(xiàn)象可能原因處理方式getTables 返回空結(jié)果schema 傳錯大小寫或 catalog 傳了干擾值將 catalog 置空schema 用大寫模式名重試表清單能查到但 getColumns 返回空表名大小寫不一致實際存儲名稱與傳入 pattern 不同拉取真實表名做不區(qū)分大小寫匹配后再查詢字段注釋始終為空表本身沒寫 COMMENT或驅(qū)動版本問題用系統(tǒng)視圖補償查詢確認(rèn)源頭有值聯(lián)合主鍵順序錯亂驅(qū)動返回順序不穩(wěn)定KEY_SEQ 需要手工排序讀取 KEY_SEQ 字段在內(nèi)存中按順序排序NUMBER 類型映射異常驅(qū)動返回可能是 NUMERIC也可能是 DECIMAL兩個 case 都要處理以 dataType 優(yōu)先判斷CLOB/BLOB 字段拼 DDL 出錯通用模板硬拼長度參數(shù)按類型分組判斷特殊類型不拼接長度自增標(biāo)志在元數(shù)據(jù)中為空驅(qū)動未完整實現(xiàn)該列查詢系統(tǒng)視圖補償用屬性開關(guān)控制啟用4.2 談幾個實際踩過的坑第一個坑與模式有關(guān)。剛開始我按常規(guī)寫法把數(shù)據(jù)庫名傳給 catalog用戶名傳給 schema結(jié)果 getTables 返回 0 行排查了很久。后來看驅(qū)動日志才發(fā)現(xiàn)達(dá)夢 JDBC 驅(qū)動內(nèi)部對 catalog 的理解和 MySQL 不完全一樣。最后把 catalog 去掉只保留 schema結(jié)果才對。第二個坑是注釋。有個表的注釋在客戶端能看到代碼里讀到卻是 null。一開始以為是驅(qū)動解析問題后來才發(fā)現(xiàn)是補償查詢時沒有加 OWNER 條件結(jié)果拿到的是另一個同名表的信息。這個經(jīng)歷讓我學(xué)會了補償 SQL 里必須顯式限定模式絕不能偷懶。第三個坑是生成 DDL 時表名錯亂。原因是原設(shè)計里 DDL 沒有加引號而原表是帶引號的混合大小寫表名重建之后全變成大寫。后來統(tǒng)一給 DDL 里的表名、字段名加雙引號問題才消失。第四個坑不算復(fù)雜但很有代表性getColumns 返回的 COLUMN_SIZE對 NUMBER 類型字段返回的是精度還是最大字節(jié)數(shù)不同版本驅(qū)動之間并不完全一致。如果你的生成邏輯對后者的依賴很強(qiáng)建議在接正式庫前先建一張包含典型類型的測試表把返回結(jié)果和客戶端里的定義逐項比對一遍。這一步能提前發(fā)現(xiàn)驅(qū)動的“特殊解釋”省得以后在真實環(huán)境里反復(fù)折騰。4.3 通用代碼的邊界與后續(xù)擴(kuò)展在達(dá)夢上這套代碼能穩(wěn)定跑起來但我也要潑一點冷水。通用代碼的優(yōu)勢是覆蓋面廣劣勢是每個數(shù)據(jù)庫的特性拿不全??梢杂醚a償機(jī)制去補齊但補償補到一定程度后代碼會越來越難維護(hù)需要有意識地做取舍。我的經(jīng)驗是如果只做表結(jié)構(gòu)展示、字段清單導(dǎo)出、反向生成基礎(chǔ) DDLJDBC 元數(shù)據(jù)接口完全夠用不需要碰系統(tǒng)表。但如果目標(biāo)是生成精確到分區(qū)策略、表空間、索引結(jié)構(gòu)、存儲參數(shù)、列加密屬性這類深水區(qū)內(nèi)容建議額外寫一個達(dá)夢專屬的方言模塊用系統(tǒng)表和系統(tǒng)視圖作為數(shù)據(jù)源。通用代碼與方言補償代碼分層存在模塊邊界清晰未來接更多數(shù)據(jù)庫時只需要替換方言模塊。我還見過一種延伸做法把通用元數(shù)據(jù)讀取做成命令行小工具輸入連接信息輸出 JSON 或 Markdown 格式的表結(jié)構(gòu)文檔。這個方向很適合做內(nèi)部的數(shù)據(jù)字典導(dǎo)出工具。后續(xù)如果要繼續(xù)擴(kuò)展可以把索引、約束、觸發(fā)器也逐步納入模型但前提是在達(dá)夢上把這些信息的元數(shù)據(jù)行為先驗證清楚。最后說一點個人體會。通用代碼這種東西“通用”是相對而言的我在達(dá)夢上驗證通過不代表換一臺環(huán)境、換一個驅(qū)動版本就萬事大吉。真正要在項目里落地先把數(shù)據(jù)庫版本、驅(qū)動版本、用戶模式和表命名規(guī)范這四樣固定下來在一個穩(wěn)定的環(huán)境基線上跑完整套流程然后才開始接其他庫。做過一遍你就能明白所謂通用不是代碼本身沒有差異分支而是差異設(shè)計在了它該待的地方。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
天天综合~91| 精品欧美乱码久| 人人超碰在线观看黄| 大香蕉中文201| 亚洲日韩美国人妻| 日韩欧美女求操每天更新| 中文字幕在线观看丝袜| 成年人黄色视频免费| 国产91美女视频| 婷婷精品| 性开放中文AV高清无码免费看| 日日嗨AV一区二区夜夜| 精品国产www久久| 熟妇高潮精品一区二区三区下载| 天天躁日日躁xxxxx| 日日黄色三级网站| 亚欧高清在线| 啊啊啊操死我| 97爱综合| 中文无线日韩一区| 久久久久骚| 日韩操逼性鲍| 狠狠爱夜夜干| 久久久久久久一级黄色打同平台| a片久久久久久久久久久久 | 久久区| 一本一道人妻久久一区二区三区| 91成人在线免费视频| 精品一级| 久久伊人影院| 91视频综合在线| 欧美 传媒 麻豆 日韩 偷拍| 亚洲欧洲视频小说在线观看| www.久久最新地址| 电家庭影院午夜69久久夜色精品国产69乱| A啊啊在线观看| 久久免费看高潮毛片韩国| 中国东北熟女老太婆内谢| 78m成人视线| 天天操天天7| 日韩精品作爱导航| 伊人玖玖网| 92福利社视频| 日韩99神马视频播放| 欧美精品自慰系列寂寞少妇| 亚洲人妻av| 精品九九九九| 亚洲三级。日韩三级| 草B在线| 中文字幕视频免费| 蜜桃狠狠色伊人亚洲综合 | 黑人粗大V S日韩女优视频| 亚洲天堂自拍| 欧美第一页| 91精品在线播放| 中文字幕免费在线观看| 国产一线二线三线av| 大香蕉中文网| 69av一区二区三区| 日本羞羞的视频在线播放| 粉嫩av平台| 91精品久久久久五月天精品 | 国产suv精品一区二区四| 91爽啪| 99性视频| 九九热男人天堂| 亚洲欧美爆| 精品99999久久久久久| 91新在线欧美| 深夜激情 | a v网站在线播放| 91久久久久久久| 黄页18禁| 91美女国产在线| 色九九综合AV| 亚洲中文字幕av | 色乱二区| 特污免视频| 久久夜夜夜| 天堂网亚洲区手机版| 韩国免费播放一级毛片| 在线岛国新天堂8| 天堂俺去俺来也www久久婷婷| 91精品国产91久久青草| 国产一区二区三区免费视频在性观看 | 亚洲精品电影| 人妻少妇av在线观看| 91N五十路| 久久国产精品视频| 碰碰97| 岛国大片在线观看网站入口| 欧亚综合一卡二卡中文字幕| 亚洲玖玖爱| 强奸抽插av| 欧美一级色| 精品亚洲俞拍视频一区| 亚洲无码日韩电影| 午夜寂寞欧美| 色哟哟 日韩精品| 亚洲一卡2卡3卡4卡乱码网站 | 欧中日成人免费影视| 九九九久| 日韩精品在线观看观看| 嗯嗯啊啊视频在线看| 亚洲美女精品| 成人五月天丁香激情综合| 人人贴人人摸| 97公开久久| 亚洲高清男人天堂| 少妇无码av专区线| 男人的天堂欧美| 蜜臀一区二区三区在线| 老鸭窝亚洲毛片| 日本欧美不卡| 91oumei| 综合网亚洲1| 亚洲97超碰| 成人午夜视频免费播放| 啊嗯嗯啊好大好爽| 天天天天干| A啊啊在线观看| 黄色免费一级在线毛片| 亚洲男人的天堂AV| 成年人性爱日韩| 亚州九九九精品视频| 草草影院日本第一页| 人妻一区久久二区三区色播| 国模无码人体一区二区三| 天天色播亚洲综合网站| 99热欧美| 超碰久久性爱| 欧美性爱日韩高清| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 亚州一区二区| 日韩激情视频| 国内毛片婷婷六月色| 69久久久久久久久久久久久| 欧美丝袜制服久久| 亚洲国产97在线精品一区| 超碰精品国产无码| 午夜性生活av免费在线看| 中文字幕五区| 91人妻最真实刺激绿帽| 久久视频,这里只有精品| 亚洲一级特黄大片在线播放91| 毛片麻豆91糖心精品毛情片| 九九碰九九爱97| 亚洲色人| 久久久久久久久久久精| 任我爽视频在线观看| 91女日逼| 亚洲91射| 91艹逼精品| 操婷婷逼| 视频黄色国产一级| 亚洲色图欧美激情| 亚洲性综合| 日韩欧美视频青青| 玖玖资源综合在线视频| 揉揉日日日日| 劲爆欧美人妖三区91| 婷婷丁香五月综合| 张柏芝国产一区在线观看| 嗯嗯啊啊用力视频免费| 美女国产一区二区久久| 国模精品一区二区三区苹果色戒| 人妻少妇精品久久久久久| 午夜久久一区二区无码中出| 操逼视频免费日韩无码| 日韩亚洲欧美中文字幕| 男人天堂最新手机版在线青青草| 歐美一級亂黃99在綫精品| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 蘋果手機免費看成人Av| 色综合91| 色婷婷色99国产综合精品| 影音先锋乱伦资源| 神马麻豆福利院| 东京热精品97综合网| 99欧美| 欧美日韩色综合网| 亚洲精品久久久久毛片A片拉屎| 天天干夜夜肏| 躁躁日曰躁2020| 99久久99久久综合| 亚洲天堂综合AV| 国产亚洲精品美女久久久m| 亚洲日韩人妻中文字幕一区| 婷婷丁香激情| 欧美AB在线| 高颜值美女口爆高潮浪叫| 精品一国2| 91白虎| 目产99999久久999| 久久久久久久久久久久久久久久9| 国产精品久久久亚洲一区| 天天躁日日躁AAA片李宗瑞| 成人一级二级| 嗯嗯啊啊好大好爽| 亚洲91网站| 国产怡红院| 日韩人妻操B| 欧美婷婷| 五月婷婷色| 91久操| 久久婷五月天| 精品久久久久久亚洲| AV九九| www.五月天| 大香网伊人久久综合| 欧美精品999| 色婷婷五月综合激情中文字幕| 久久精品国产亚洲AV嘿嘿| 91影库| 一级@啪啪视频| 巨爆乳一区二区爆乳区| 操逼逼福利视频| 乱伦日本色图AⅤ| hd成人一区二区在线| 亚州AV无码国产精品| 亚洲欧美日韩夜夜| 97高清啪啪| 美女大乳久久久久久久女人18| 亚欧美天堂在线| 国产性感骚丝袜在线| 天天看少妇| 大香蕉伊人网WWWn0n| 日韩av色图综合| 日韩欧美水蜜桃人妻| 天天操福利视频综合网站| 校园春色 亚洲| 久久国产成人精品国产成人亚洲| 国产91亚洲精品一区二区三区| 日本潮催一卡操| 午夜一区二区三区国产| 91一起操| 久久久久久中文版| 18+91网站| 精品国产乱子伦一区二区三区,精品一| 欧美中文字幕精品人妻| 亚洲欧美在线观看免费| 又大又长又爽| 在线小视频| 亚洲欧美伦综合| 大香蕉乱级| 男男H黄动漫啪啪无遮挡网站| 婷婷久久大香蕉| 77777亚洲蜜臀精品久久综合蜜臀| 五月天伊人| 久久久天美| 亚洲97| 亚洲无吗在线视频| 色999人与兽| 婷婷色一区| 欧美大色交| 亚洲国产美女久久久久| 久久综合av| 久久伊人影院| 国产丝袜视频| 亚洲,欧美,综合网| 五月婷婷丁香六月丁香| 视频二区美腿丝袜制服人妻欧美 | 黑白配性爱AV成| 青娱乐国产剧情av一区| av中文字幕在线熟女| 大肉棒导航| 国产精品乱码久久| 日本国产成人亚洲精品无码| 欧亚日韩三区| 亚洲欧美国产中文视频| 亚洲精品男人的天堂| 99re6国产精品99re| 五月丁香激情四射| 色婷婷激情| 超碰是碰在线观看| 国产精品嫩草久久久久| 久久久9品一区二区三区| 九九九九九九精品| 激情五月天色色网| 夜夜操91744565| 久久内射| av在线浏览| 欧美少妇人妻| 97天天爽| 日本一道在线播放高清| 日韩国产品视频中文字| 欧美天天综合网| 99精品免费| 精品无av| 99这里只有精品| 亚洲丝袜二区在线| 亚洲精品视频二区| 91美女小视频| 操逼日韩无码| 亚洲中文字幕av| 岛国片在线观看视频亚洲| 欧美综合777| 色嗨嗨在线| 久久成人午夜狠狠| 蜜乳性色无码专日粉嫩骚逼AV| 亚州日韩97| www.av在线视频| 婷婷五月天无码 | www网站黄| 天天综合网合集91| 男人的天堂激情| 午夜小电影在线插入淫高潮| 天天碰操中国年青熟妇| 亚洲女毛多水多21P| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 少好三P| 亚欧高清v| 国产农村妇女毛片精品久久| 四虎 精品 WWW| 中文人妻av高清一区| 综合久久2017| 亚洲狼狼干综合1| japan日本高清乱xxxx| 啊灬啊灬啊灬啊灬高潮奶出了免费视 | 九九AV| 色牛aV| 神马久久久久久久久久久久| 亚洲综合精品国产一区| 亚洲国产美女久久久久| 97视频在线免费播放| 国产精品无码AV网站| 肥佬影院91| 婷婷三区| 成视频在线观看免费看| 欧美日韩免费性爱| 97在线观| 日韩淫色网| 麻豆天美国美国产AV| 成人97人人超碰人人| 日日爽熟女| 欧美性暴力猛交XXXX | 超碰在线人妻不卡| 欧美色五月| 精品无码久久久久久国产浪潮| 人妻喷水| 久久久久9999妇女| 天天日天天爽| 久99久视频| 色五天伊人| 日本一区不卡| 96国产精品| 91老熟女老女人国产老太| 六月丁香啪啪| 在线强奷到舒服的无码视频| 操操逼操操逼操操逼逼| 福利视频香蕉免费一区二区在线| 日韩成人小视频| 日韩精品怡红院| 6080yy午夜理论三级一区二区三区无码| 色婷婷六月丁香七月婷婷| 超碰导航97| 久久久成人精品| 爱干爱射网啊啊啊| 一区二区三区四区色图| 国产色呦呦| 日韩中文字幕视频| 亚洲无无码αⅴ每日更新| 久久二| 九九热只有精品| 中文字幕人乱码中文字的预防方法 | 亚洲一区二区中文字幕| 九月激情婷婷| 亚洲国产av中文字幕久久| 97在线免费观看| 97碰碰色| 无码人妻一区二区三区四区老鸭窝| 精品欧美日韩在线观看| 久久人人爽av亚洲精品天堂桃色| 九九九热精品| 欧洲精品一二三在线| 中文字幕十五区| a男人的天堂| 北条麻妃99精品青青久久| 天天日少妇逼AV| 99热国产| 开心激情站| 五月丁香色婷婷| 99婷婷| 精品人妻伦一二三区久久| 色综合网1| 天天爽夜夜操| 强奸熟女一区二区三区| 国产亚热在线久久| 色区97| 国产路线专区| 亚洲综合九九| 国产成人亚洲精品无码最新在线| 日本乱人伦片中文三区| 国产福利精品98视频| 人人操人人干xxx| {男男暴菊gay无套网站| 国产日韩在线播放| 九九热九九| 超碰97亚洲| 国产精品香蕉| 免费国产电影一区二区| 欧美 精品国产制服第一页| 操逼视频国产无套| 中文字幕久热视频在线| 欧日a| 97干在线视频| 日本不卡二三区| 欧美乱妇狂野欧美在线视频| 青久久| 另类小说欧美激情校园春色| 中文字幕天堂在线| 国产在线精品偷| 天美国产三级传媒| 天天超级碰碰碰| 久久久78| 国产9 9在线 | 亚洲| 久久av成人无码免费| 成人短视频在线观看| 黄色成品网站| 亚洲小说视频| 欧美强奸乱| 97天天摸天天碰| 极品后入免费视频| 蜜臀AV午夜精品久| 亚洲精美粉嫩嫩泬在线观看| 2020视频1区2区3区| 丁香五月天久久精品视频一区二区三区| 四虎在线观看网站| 国产成人拍国产亚洲精品| 99久久精品无码一区二区| 久草婷婷| 另类专区加勒比| 2023天天操夜夜操| 91干熟女| 97超碰久| 日韩成人高清一区二区| 亚洲AV无码国产精品久久久久| 欧美.亚洲.另类.丝袜.制服.诱惑| 白丝在线一区| 操逼视频国产无套| 久久一二三四五六七八九区区区| 人妻天天爽| 日韩免费三级黄片电影| 色婷婷电影网| 欧美日日人人天天| 国产成人综合在线播放| 中文字幕视频2区| 色欧美在线| 久久毛卡| 欧美日韩人妻婷婷一区| 超碰97人人cao| 欧美日韩情色一区二区| 中文字幕精品码亚洲| 美女黄频a美女大全免费皮| 操人妻逼91| 九九九久久久| 久久天天摸| 综合久久9| 激情99| 91性情| 屌逼传媒| 久艹日日日| 日韩欧美女优电影| 欧美国产婷婷久久| 天美av在线观看| 97天堂| 亚洲 日本 一 二 三| 国产精品夜夜夜| 牛牛aV| 国产精品成久久久久午夜午夜| 天天插天天操| 97中文热色| 狠狠综合网| 亚洲欧美在线丝袜| 亚州伊人色综台| 欧美综合自拍| 超碰97最新人妻| 日本无码1| 欧美精品欧美精品系列| 久久久国产成人一区二区三区在线| 久污| 丁香五月影院| 日韩欧美加勒比| 97内射偷拍| 免费自拍三级综合| 超碰9 7女人| 丁香六月啪啪| 国产欧美日本亚洲精品| 天天操人人操骚逼网站| 日本综合久久| 国产精品精品系列在线观看| 鸥美插入视频| 九九久久综合| 国产辣妈在线视频福利| 欧美亚洲高清不卡| 色区久久| 在线观看不卡一区二区三区| 欧美一区二区三区黄色影视| 一区二区激情国产熟女| 国产高清视频无码在线| 无卡一区=区| 蜜桃色色网站视频三区| 日韩精品在线观看观看| 97欧美日韩精品| 国产夜夜操| 黑人无码一区二区| 蜜臀久久99精品久久久久久无删减 | 99九九精品| 国产在线综合网| 蜜臀久久99'精品久久久| a网站免费观看| 综合国产影视三级| 久久久精品网| 欧美色图自拍| 蘋果手機免費看成人Av| 久久男人的天堂国产| 一起草日韩| 好色综合| 久久大香蕉97| 骚人妻少妇视频| 亚洲AV免费在线观看| 免费观看的黄色的网站| 欧美日韩在线视频网站| 91精品国产长腿丝袜美女| 少妇同性| 99热色这里只有精品| 无码国产精品久久久久| 精品无码久久久久久国产浪潮| 色图四区| 超碰久草| 欧美一区二区三区成人性生活| 久久免费中文字幕在线观看| 久久久九九网站| 日韩在线一区高清在线| 久久久97| 60秒不遮不挡| 理论久久婷婷网8| 久久久久国产精品人妻aⅴ天堂| 人人爽夜夜操| 91天天日| 啊啊啊啊啊啊啊国| 综合网欧美在线| 久久九九网| 日韩精品在线观看网站| 啪啪资源网| 69少妇一区二区| 日韩黄片影院| 久久透逼视频| 国产操逼视频在线观看| 国产三级资源在线观看| 久/久精品99看9| 乳欲人妻办公室奶水| 国产色综合亚洲色综合吹潮| 夜夜草我| 日韩精品色呦呦| 国产成人无码a| 伊人操你| 丰满人妻无码一区二区三区| av强奸乱轮| 人人做天天爱| 欧美日韩不卡a片| 国产成人欧美一区二区三区的国产| 乱性AV| 无码精品久久| 国产高清无码一区三区二区| 国产精品极品美女视频| 无码 有码 国产18p| 韩国一级婬片A片AAAAA| 婷婷激情四射| 少妇 综合| 亚洲人在线| 天堂在线一区二区| 亚洲AV在线资源| 天天舔日美女视频| 一区二区高清视频| 性暴力欧美猛交在线直播| 2019久久久久久久久福利| 天天视频黄网站| 色婷五月| 国产久久一区二区三区野外在线| 九九九九九九成人| 日本久久久精品电影| 亚洲丝袜在线观看| 亚洲人妻中文在线视频| 在线综合色| 九月婷婷综合| 2017天天透天天通天天擦| 色综合91好| 欧美日本天堂| WWW美腿丝袜香蕉中文| 后入式五六区| 欧美91变态| 少妇高潮流水av免费| 色操逼网| 色五月激情网| 亚洲s在线观看| 亚洲国产精品久久久男人的天堂| 国产精品69久久久久久久| 久久精品久久久久久久| 91人妻最真实刺激绿帽| 久久婷婷六月综合| 99在线观看无大码| 一二三区精品视频| 无码人妻精品一区二区中文| 丁香五月激情五月| 曰本91情色| 九九九九9999| 午夜精品探花| 六月丁操逼| 久9综合在线| 老熟女乱伦一区| 日欧操屄视频| 日韩精品操少妇| 人妻天堂网| www黄片免费看com| 麻豆福利视频导航| 亚洲精品91| 多乙久久久久久| 久久超碰亚洲人| 亚洲图片小说欧洲| 日本视频一区二区三区| 亚洲日韩av一区二区三区百合| 欧美综合传媒| 亚州一区二区成人片免费| 国产最新AV| 欧美综合综合| 亚洲国产欧美中文永久| 亚洲欧美日韩电影网站一区| 熟女乱3伦999| 欧插网站| 91春色| 午夜天堂啪啪| 玖玖综合视频| 91天堂色男人的天堂| 人妻在线大香蕉| 成人小说另类在线| 亚洲色堂免费视频| 97爱亚洲| 欧美嫩性色| 日韩熟女精一区二区三区不卡| 欧美成人一级免费电影| 欧美色色人| 性爱Av免费| 精品一区二区三区四区外站| 韩国手机不卡无码三级视频| 国产污视频麻豆传媒一区二区 | 国内偷拍精品一区二区| 99re6国产精品99re在线| 久久精品—区二区三区内射| 国产91美女高潮| 精品69网| 99超碰色| 三级精品三级在线观看| 中文字幕av一区二区三区人妻少妇 | 岛国大片在线观看网站入口| 久久成人午夜狠狠| 九九性爱网| 天美传媒精品久久视频| 天天日天天色| 在线视频 亚洲精品| AV一二区| 四虎影视永久在线免费| 久久久内射良家| 精品一区二区亚洲国产| 九九九九九精品视频| 大香蕉伊利av| 国产又黄又爽又刺激久久久久久 | 国产日韩区| 久久久精| 黄色AV影视| AV麻豆免费一区| 日韩不卡一二三四| 4399成人黄A片| 色牛aV| 91色伦综合| 久久人人看| а√天堂资源官网在线资源| 国产第11页| 99热这里只有精品8| 少妇综合网| 97欧美久久久久久久| 男人的天堂亚洲| 国产成人 综合亚洲 天堂| 亚洲国产中文字幕| 久操九九九九| 郑州宾馆老熟女露脸啪啪| 亚洲黄色电影| 欧美页片| 淫妻综合网| 91精品女厕偷拍视频| 国产91美女视频| 91九九九小逼| 中文字幕在线观看丝袜| 少妇啪啪自拍| 91美女网站| 五月天欧美色图| 污到发麻的视频 国产| 操B在线观看| 精品人妻一区二区三区在| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 免费看一级a性色生活片久久无| 日韩97| 亚洲激情欧美色图| 精品九九九九九九九| 国产精品色| 太久视频| 乱伦一二三区| 日本不卡五区| 四虎影视国产精品| 99久热精品99re6热| 夜夜操2028| 国产尹人在线视频免费| 欧亚性爱在线视频| 中国AAAAAA黄色片| 2017天天插| 高潮9999外国| 熟女91网| 亚洲色图第四色| 黑人与人妻| 欧美 传媒 麻豆 日韩 偷拍| 夜夜嗨一区二区| 欧美 亚洲 偷拍自拍| 18禁精品网站在线看| 日韩免费簧片| 插入逼91| 国产女同在线观看视频| 天天综合中文字幕 91| 亚洲第一视频 欧美风情 日韩| 91在线/欧洲| 欧美 亚洲 另类 综合| 麻豆久久久久久久久丝袜 | 亚洲欧美洲综合| 91欧洲入口| 老外又粗又长一晚做五次| 欧美熟妇色| 国产精品成人午夜福利| 夜夜久久久| 综合欧美色图| 91综合网在线| 超碰人妻久久| 久草成人| 午夜男女爽爽大片免费观看| 久操视频在线观看| 一级乱伦网站| 狠狠操,使劲操| 日韩精品在线放| 亚洲欧洲日韩天堂av| 日本黄色大片一级视频免费麻豆| AV天堂国产| 波多野42部无码喷潮在线观看 | 天天影视网综合少妇| 欧美.亚洲.另类.丝袜.制服.诱惑| 99无码| 亚洲免费精品一区| 你草精品在线视频| 伦理弟一页| 精品国产乱码久久久久久免费| 亚洲风情综合网| 熟妇一区二区| 麻豆视频国产一区二区| 天堂а√在线最新版在线| 日本免费专区| www色色com| 黄色二级片网站| 色天堂在线观看| 97久操| 色欲天天综合久久久无码网中文| 国产最火爆久久国产网站网站 | 欧美色图99| 91五十路| 东北丰满熟女国产一区| 婷婷久久五月| 少妇天堂网络| 蜜臀99久久精品| 免费操逼91| 精品一区二区综合熟妇| 91美女丝袜诱惑视频| 情色五月天久久久| 男人天堂最新手机版在线青青草| 狼人狠干| 99精品欧美一区二区三区桃色| 在线观看日韩av不卡| 蜜桃精品一区二区三区ww| 亚州色阁| 日本不卡二区| 午夜福利成人免费视频| 蜜奶av| 91中出在线| 国内偷自视频区视频综合| 国内精品伊人久久久久影院会| 天天综合网一91网| 久久久精| 欧美1区二区三区公司 | 日韩操啪| 久久ww| 青草视频人妻在线观看| 91精品国产综合久久久蜜臀酒店| 26uuu国产日韩综合在线观看| 一级做a爰片性色毛片久久| www久| 日本不卡二三区| 啊啊啊水好多| 免费超碰97在线观看| 天天操夜夜操| 色噜噜狠狠色综无码久久| 日本人妻最新在线中| 欧美成va视频网站| 亚洲十八禁止| 久久精品 六十路 熟女 欧美| 丁香五月婷婷基地| 无毛精品| 久久精品国产99精品亚洲蜜...| 夜夜爽77777| 亚欧美色图| 熟女乱伦A| 日韩人妻网站| 日韩兔费看黄片| 丁香六月婷| 日本高清一本二本免费不卡| αⅴ天堂| 精品无码人妻一区二区免费蜜桃| 精品无码久久久久久久杏吧| 日韩素人无码一区二区三区三州| 另类图片五月天| 中文一区在线视频| 久久久久久久久久久久欧美日| 天天日天天干天天色| 99999久久久久9国产精品| 夜夜爽夜夜高潮夜夜爽| 91久久久久久| 日韩久射综合| 久久伊人五月天| 天天夜夜rb| 五月天久久久| 三级色影综合网| 九九这里只有精品| 国产伦精品| 97九色人妻| 天天看天天日| 日韩少妇丰满亚洲| 国产乱色国产精品免费视| 亚洲吊色| 伊人影院综合是一个与深夜成人在线| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 亚洲91色在线| 国产无吗在线播放| 热久久九九热| 日韩乱伦影音先锋| 欧美亚洲清纯| 97干在线| 性综合网| 日本最新免费韩国1区2区视频播放| 欧美激情性爱视频网站| 夜夜爽爽夜夜精品视频| 熟女人妻一区二区三区| 国产精品另类| 美女黄页| 人人潮人人摸| 香港久久久| 精品大久久| 操逼操逼视频操逼| 强奸国产精品视频| 粉嫩小泬久久久一区二区| 爱av免费| 国产精品人妻无码久久久互動交流| 中文乱码99| 播播亚洲小说亚洲| 9丨久久九九九| 青青操在线亚洲视频观看欧美在线 | 99久热精品99re6热| 在线v中文字幕一区二区三区| 青青草色AV| 欧美性色综合网| AV无码久久久精品| 97久久久| 好爽要喷了| 伊人97色天使| 欧美日韩国内不卡| 97在线免费视频| 91 国产丝袜在线播放-百度| 大胆91| 欧美日韩一区二区三区四区蜜桃| 久久久久久九九九九九| 330Dv国产女人终合视频极品人与兽| 成人午夜小视频手机在线看| 97亚洲精品| 爱丝福利| 精品国产99| 婷婷性爱| 国产精品探花在线| 三级日韩一区二区三区| 亚洲色棕合| 青青草五月天| 色性综合| 影音先锋中文字幕日本好一区二区| 亚欧色图在线激情| 国产三级中文字幕粉嫩 | 国产91精品在线免费| 福利五区| 欧美亚洲美少妇一区二区| 一本道综合色图| 日韩欧美国产高清视频| WWW操逼| 91综合站| 亚春色色| 日日日日做夜夜夜夜做无码97| 久久的网站啊啊啊啊啊| 97人人草| 怡红院一区二区熟女人妻| 高清无码在线播放网站| 国产精品点击进入在线影院高清| 91狠狠狠| 天天天堂影视日韩亚洲91| 91网站18在线| 粉嫩国产精品久久久| 韩国久久97| 六月天婷婷| www久| 91站街按摩店老熟女熟女| 啪啪资源网| 脫衣舞一区二区三区| 人人干黄色| 成全动漫视频观看免费下载| 97干在线| 亚洲久久久久| 91综合网站| 不卡视频一区蜜桃视频 | 1000部熟女视频在线观看| 欧美中文综合| 国产sv美女内射| 久久这里只精品| 成年在线视频日本亚洲在线视频区精品江靖宇公司 | 激情终合网| 台湾大香蕉99热| 日韩在线97| 国产亚洲日本| 色臀aV| 亚洲极品| 亚洲中文字幕av| 啊啊啊啊好疼| 国产精品天堂| av毛片aaaaa免费看| 精品无码久久久久久久杏吧| 懂色Av| 操逼无码操逼| 艹精品| 亚洲国产午夜真人一级片中文字幕精品黄网站 | 欧洲熟妇xxXx欧美老妇裸体| 日韩无码专区| 色综合98| 欧美另类自拍 | 91人妻做a观看视频| 黄片无码在线制服| 色人久久| 中文字幕一区二区三区人妻少妇在线| 欧美色图天堂网m| 美性中文综合网| 麻豆a'v电影| 麻豆av一区二区| 欧美组图日韩亚洲中文字幕| 秋霞一集毛片观看| 操逼天美3区| 成人黑料社久久| 丝袜六区| 97一本大道亚洲一区| 亚洲第一页综合在线| 色妇综合网| 日韩中文字幕视频| 久久香蕉国产线看观看猫咪av| 开心五月婷婷激情| 快点操死我| 啊啊啊不要嗯嗯在线观看| 九九热精品视频六| 少妇熟女1区2区3区| 亚洲毛片一级带毛片基地| 涩五月婷婷| 日日夜夜草草草| 另类欧美综合| Sekablack无码一区| 久久精品店| 精品人妻1237| 中文字幕无码不卡啪啪| 久草在线| 国产精品岛国片在线观看| 97超碰色五月| 日韩欧美蜜桃精品久久中文字幕久久| 久久啊啊啊| 国模艳艳啪啪一区| 91亚洲黑人| 大香蕉在线SuP| 日韩成人私密一级精品av| 国产午夜无码片在线观看影视| 综合网,亚洲,欧美| 在线电影亚洲色图| 手机看片日韩人妻| 少妇一线天久久久久久| 日韩一级二级三级免费看完整版国语版| 97K超碰在线| 在线免费观看日韩一区| 久久婷婷一区二| 91伊人久| 狠狠色综合网| 熟女熟妇伦久久影院毛片一区二区| 欧美人黑A片无码免视费| 欧美日韩操逼嗦吊| 91综合国产精品| 91在线免费精品视频| 99人人干| 99re6在线视频精品免费完整版安卓版| 91黑丝在线| 九九热在线精品视频| 欧美中字不卡| 大香蕉视频一二三区| 熟女丝袜视频| 91美| 国产视频一区二区免费| 啊啊啊好大好湿| 亚洲无码超碰免费| 国产人妻精品久久久一区二区三区 | 以及麻豆国产入口在线观看免费| 天堂岛av| 天天操妹子| 国产超碰| 久久精品99| 日韩免费看黄片| 欧美一级专区免费大片| 国产日韩欧美操逼视频 | 在线色导航| 自拍视频大全亚洲专媒视频/一区二区三区| 天天看片青娱乐| 伊人久久88国产女| 嗯嗯啊啊啊好爽| 天天综合网站| 色九久| 91久久久久免| 亚洲国产97| 91狠婷| 69视频入口| 亚洲欧美另类少妇精品| 日韩熟女无码| 上床不卡网站| 欧美精品一区二区少妇免费A片| 黑丝日韩av丝袜av| 欧美日韩国产另类综合| 99蜜桃臀亚洲成人在线观看| 精品无码久久久久久国产浪潮| 人妻 欧美 中文| 神马久久久久久伦理片| 超碰69| 色小视频蜜乳| 亚洲天堂加勒比| 中文字幕二区日韩天堂| 亚洲自拍偷拍视频在线| 精品乱子一区二区三区99| 日韩免费簧片| 国产精品在线网站| 夜夜影视四色| 国产尤物在线三区| 久久精精区一区二区一蜜桃一区二区| 亚洲熟女诱惑| 亚洲国产综合久久久性感熟妇| 亚洲 欧美 精品专区 极品| 麻豆影音天美视频| 国产精品无码av在线| 九久久精品| 丁香激情五月| 国产欧美在线观看免费观看| 色噜噜人妻丝袜AV资源| 一牛影视成人片免费| 亚洲少妇综合| 国产精品情侣啪啪| 操www| 中文字幕无码不卡啪啪| 97五月天| 欧美黄色大片在线观看| 91热色| 97视频网站在线观看| 性爱乱伦视频免费| 蜜臀中文无码午夜| 一道本东京热加勒比一区二区三区| 久久首页| 96超碰网| 久久綜合很很很| 99操视频| 国产女s强制榨精视频| 国产精品色| 99999精品成人| 手机看片1024你懂的国产| 九九九九免费| 9999久久久久| AV天堂丝袜| 99久久精品无码一区二区| 欧成人精品H无码| 亚洲综合一| 美女人妻色网站| 自拍大香蕉乱插| 亚洲在线网站| 久久午夜神马| 97在线青| 美女露胸露屁股| 成人性爱电影网| 久久精品久久九九精品| 国产搭汕a级片| 性爱AV天堂| 91在线美女| 柠檬AV导航| 日本丝袜人妻内射| 久久伊人最新网址视频| 国产AV天美传媒一区二区三区| 九九热免费在线国产视频伊人五月| 在线中文字幕极品av| 天天做天天爱夜夜爽毛片试看| 日本黄色精品| 色哟哟av网址| 青青草十区九区爱夜| 99成人| 五月色网| 欧美视频边做饭边橾| 影音先锋新男人| 插入逼91| 91亚洲电影| 少妇的嫩逼图片| 欧美激情一| 日日摸日日碰| 玖玖爱一区在线| 91逼逼女人91| 91视频国品一二三区| 久久婷婷色| 爆操无码| 国产精品一级毛片不卡视| 成人97人人超碰人人| AV麻豆免费一区| 人妻另类 专区 欧美 制服| 男人的天堂久久久| 亚洲熟女人妻中文字幕一区二区 | 日本高清_区二区三区| 欧美天天干| 粉嫩av久久一区二区三区| 97操| 久久AV无码AV| 熟女探花啪啪| 日韩免费a级毛片无码a∨| 91精品91久久久久77777俄罗斯老妇姓x| 久久大香蕉97| 外国免费性情大片| 欧美性夜| 中文乱码字幕观看| 中文字幕后石码三区四区| 亚州欧美色图| 国产品精品自在在线午夜免费| 亚洲超碰97| 国内偷拍精品一区二区| 一级做受视频免费是看美女| 亚欧无码线免费观看视频| 波多野结衣AV无码一区| 久久久久久久久久va| 岛国黄| 欧美性爱在线无码| 久久99综合| 超碰久久性爱|