日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

GoldenGate for Java adapter介绍二(代码篇)

發(fā)布時(shí)間:2024/9/5 java 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 GoldenGate for Java adapter介绍二(代码篇) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本示例主要介紹通過(guò)實(shí)現(xiàn)OGG的接口函數(shù),實(shí)現(xiàn)自定義處理增量數(shù)據(jù),將數(shù)據(jù)實(shí)時(shí)寫入到mariadb (OGG官方不支持此數(shù)據(jù)庫(kù),所以只能采用自定義方式實(shí)現(xiàn))。以下是本次示例的4個(gè)類:

ConnectionFactory

package sample.handler.jdbc;

import java.sql.Connection;

public interface ConnectionFactory {

public Connection getConnection() throws Exception;

}


DriverClassConnectionFactory

package sample.handler.jdbc;

import java.sql.Connection;

import java.sql.Driver;

import java.sql.SQLException;

import java.util.Properties;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

public class DriverClassConnectionFactory implements ConnectionFactory {

private static final Logger logger = LoggerFactory.getLogger(DriverClassConnectionFactory.class);

protected String driver;

protected String url;

protected Properties arguments;

@Override

public Connection getConnection() throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException {

logger.info(new StringBuilder("Connect to [").append(url).append("] via [").append(driver).append("] with arguments: ").append(arguments).toString());

Driver driv = (Driver)Class.forName(driver).newInstance();

return driv.connect(url, arguments);

}

/**

* @return the driver

*/

public String getDriver() {

return driver;

}

/**

* @param driver the driver to set

*/

public void setDriver(String driver) {

this.driver = driver;

}

/**

* @return the url

*/

public String getUrl() {

return url;

}

/**

* @param url the url to set

*/

public void setUrl(String url) {

this.url = url;

}

/**

* @return the arguments

*/

public Properties getArguments() {

return arguments;

}

/**

* @param arguments the arguments to set

*/

public void setArguments(Properties arguments) {

this.arguments = arguments;

}

/**

* @param user the user to set

*/

public void setUser(String user) {

if (arguments==null) {

arguments = new Properties();

}

arguments.setProperty("user", user);

}

/**

* @param password the password to set

*/

public void setPassword(String password) {

if (arguments==null) {

arguments = new Properties();

}

arguments.setProperty("password", password);

}

}


OGG接口實(shí)現(xiàn)類SimpleJDBCHandler

package sample.handler.jdbc;

import java.math.BigDecimal;

import java.sql.Connection;

import java.sql.Driver;

import java.sql.PreparedStatement;

import java.sql.SQLException;

import java.sql.Timestamp;

import java.sql.Types;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Arrays;

import java.util.Properties;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import oracle.goldengate.datasource.*;

import oracle.goldengate.datasource.GGDataSource.Status;

import oracle.goldengate.datasource.meta.*;

public class SimpleJDBCHandler extends AbstractHandler {

private static final Logger logger = LoggerFactory.getLogger(SimpleJDBCHandler.class);

protected ConnectionFactory connFactory;

protected Connection conn;

protected String driver;

protected String url;

protected Properties arguments;

protected PreparedStatement pstmt;

protected String lastOp;

protected int keyIndex;

protected int batchSize = 0;

protected int maxBatchSize = 10000;

protected long reportCount = 0;

protected long lastReportTime;

protected long opCount;

protected SimpleDateFormat dateFormat;

/**

* @param connectionFactory the Class name of connection factory to set

* @throws ClassNotFoundException

* @throws IllegalAccessException

* @throws InstantiationException

*/

public void setConnectionFactory(String connectionFactory) throws InstantiationException, IllegalAccessException, ClassNotFoundException {

connFactory = (ConnectionFactory)Class.forName(connectionFactory).newInstance();

}

// 獲取目標(biāo)端的DB連接

public Connection getConnection() throws Exception {

if (conn==null) {

if (connFactory==null) {

logger.info(new StringBuilder("Connect to [").append(url).append("] via [").append(driver).append("] with arguments: ").append(arguments).toString());

Driver driv = (Driver)Class.forName(driver).newInstance();

conn = driv.connect(url, arguments);

} else {

conn = connFactory.getConnection();

}

conn.setAutoCommit(false);

}

return conn;

}

/* (non-Javadoc)

* 一個(gè)事務(wù)的開(kāi)始

*/

@Override

public Status transactionBegin(DsEvent e, DsTransaction tx) {

if (logger.isDebugEnabled())

logger.debug("Method transactionBegin invoked. TxID="+tx.getTranID());

//batchSize = 0;

return super.transactionBegin(e, tx);

}

/* (non-Javadoc)

*一個(gè)新的記錄操作

*/

@Override

public Status operationAdded(DsEvent e, DsTransaction tx, DsOperation op) {

if (logger.isDebugEnabled())

logger.debug(new StringBuilder("Method operationAdded invoked. TxID=").append(tx.getTranID()).append(" OpNum=").append(tx.getTotalOps()).toString());

Status status = GGDataSource.Status.OK;

if (op.getOperationType().isInsert()) {

status = insertAdded(e, tx, op);

} else if (op.getOperationType().isUpdate()) {

status = updateAdded(e, tx, op);

} else if (op.getOperationType().isDelete()) {

status = deleteAdded(e, tx, op);

}

if (reportCount>=100) {

if (++opCount == reportCount) {

long duration = System.currentTimeMillis() - lastReportTime;

logger.info(new StringBuffer().append(opCount).append(" operations have been processed in last ").append(duration/1000).append(" seconds. Rate=").append(opCount*1000/duration).toString());

opCount = 0;

lastReportTime = System.currentTimeMillis();

}

}

return status;

}

// insert操作

protected Status insertAdded(DsEvent e, DsTransaction tx, DsOperation op) {

try {

String currentOp = op.getTableName()+".INSERT";

if (!currentOp.equals(lastOp)) {

if (batchSize>0 && pstmt!=null) {

executeBatch();

}

String sql = prepareInsertSql(e, tx, op);

System.out.println("insert-sql:"+ sql);

if (logger.isDebugEnabled())

logger.debug("Prepare insert. SQL=["+sql+"]");

pstmt = getConnection().prepareStatement(sql);

lastOp = currentOp;

}

TableMetaData tmeta = e.getMetaData().getTableMetaData(op.getTableName());

for (int i=0; iColumnMetaData cmeta = tmeta.getColumnMetaData(i);

DsColumn col = op.getColumn(i);

bindValue(pstmt, i+1, cmeta, col.getAfter());

}

pstmt.addBatch();

if (++batchSize == maxBatchSize) {

executeBatch();

}

return GGDataSource.Status.OK;

} catch (Exception ex) {

logger.error("Method insertAdded failed.", ex);

return GGDataSource.Status.ABEND;

}

}

// update操作

protected Status updateAdded(DsEvent e, DsTransaction tx, DsOperation op) {

try {

String sql = prepareUpdateSql(e, tx, op);

if (!sql.equals(lastOp)) {

if (batchSize>0 && pstmt!=null) {

executeBatch();

}

if (logger.isDebugEnabled())

logger.debug("Prepare update. SQL=["+sql+"]");

pstmt = getConnection().prepareStatement(sql);

lastOp = sql;

}

System.out.println("update-sql:"+ sql);

TableMetaData tmeta = e.getMetaData().getTableMetaData(op.getTableName());

for (int i=0, j=0, k=keyIndex; iColumnMetaData cmeta = tmeta.getColumnMetaData(i);

DsColumn col = op.getColumn(i);

if (!col.isMissing()) {

bindValue(pstmt, ++j, cmeta, col.getAfter());

}

if (cmeta.isKeyCol()) {

if (col.hasBeforeValue()) {

if (logger.isDebugEnabled())

logger.debug(new StringBuilder(op.getTableName().toString()).append(": Key ").append(cmeta.getColumnName()).append(" is updated. before=[").append(col.getBefore().getValue()).append("], after=[").append(col.getAfter().getValue()).append("]").toString());

bindValue(pstmt, ++k, cmeta, col.getBefore());

} else {

bindValue(pstmt, ++k, cmeta, col.getAfter());

}

}

}

pstmt.addBatch();

if (++batchSize == maxBatchSize) {

executeBatch();

}

return GGDataSource.Status.OK;

} catch (Exception ex) {

logger.error("Method updateAdded failed.", ex);

return GGDataSource.Status.ABEND;

}

}

// delete操作

protected Status deleteAdded(DsEvent e, DsTransaction tx, DsOperation op) {

try {

String currentOp = op.getTableName()+".DELETE";

if (!currentOp.equals(lastOp)) {

if (batchSize>0 && pstmt!=null) {

executeBatch();

}

String sql = prepareDeleteSql(e, tx, op);

System.out.println("delete-sql:"+ sql);

if (logger.isDebugEnabled())

logger.debug("Prepare delete. SQL=["+sql+"]");

pstmt = getConnection().prepareStatement(sql);

lastOp = currentOp;

}

TableMetaData tmeta = e.getMetaData().getTableMetaData(op.getTableName());

for (int i=0, j=0; iColumnMetaData cmeta = tmeta.getColumnMetaData(i);

if (cmeta.isKeyCol()) {

DsColumn col = op.getColumn(i);

bindValue(pstmt, ++j, cmeta, col.getBefore());

}

}

pstmt.addBatch();

if (++batchSize == maxBatchSize) {

executeBatch();

}

return GGDataSource.Status.OK;

} catch (Exception ex) {

logger.error("Method deleteAdded failed.", ex);

return GGDataSource.Status.ABEND;

}

}

// 多個(gè)操作批量執(zhí)行,提升效率

protected int[] executeBatch() throws SQLException {

try {

int[] result = pstmt.executeBatch();

if (logger.isDebugEnabled())

logger.debug(new StringBuilder("Batch executed. Op=[").append(lastOp).append("] size=").append(batchSize).append(" result=").append(Arrays.toString(result)).toString());

batchSize = 0;

return result;

}

catch(Exception ex) {

System.out.println(ex.getMessage());

ex.printStackTrace();

return null;

}

}

protected String prepareInsertSql(DsEvent e, DsTransaction tx, DsOperation op) {

String tbName = op.getTableName().toString().toLowerCase().replace(" scetc.", " public.");

StringBuilder sql = new StringBuilder("insert into ").append(tbName).append("(");

StringBuilder valueClause = new StringBuilder(") values (");

for (ColumnMetaData cmeta : e.getMetaData().getTableMetaData(op.getTableName()).getColumnMetaData()) {

sql.append(cmeta.getColumnName()).append(",");

valueClause.append("?,");

}

sql.deleteCharAt(sql.length()-1).append(valueClause.deleteCharAt(valueClause.length()-1)).append(")");

return sql.toString();

}

protected String prepareUpdateSql(DsEvent e, DsTransaction tx, DsOperation op) {

String tbName = op.getTableName().toString().toLowerCase().replace(" scetc.", " public.");

StringBuilder sql = new StringBuilder("update ").append(tbName).append(" set ");

StringBuilder whereClause = new StringBuilder(" where 0=0");

TableMetaData tmeta = e.getMetaData().getTableMetaData(op.getTableName());

keyIndex = 0;

for (int i=0; iColumnMetaData cmeta = tmeta.getColumnMetaData(i);

DsColumn col = op.getColumn(i);

if (!col.isMissing()) {

sql.append(cmeta.getColumnName()).append("=?,");

keyIndex++;

}

if (cmeta.isKeyCol()) {

whereClause.append(" and ").append(cmeta.getColumnName()).append("=?");

}

}

sql.deleteCharAt(sql.length()-1).append(whereClause);

return sql.toString();

}

protected String prepareDeleteSql(DsEvent e, DsTransaction tx, DsOperation op) {

String tbName = op.getTableName().toString().toLowerCase().replace(" scetc.", " public.");

StringBuilder sql = new StringBuilder("delete from ").append(tbName).append(" where 0=0");

for (ColumnMetaData cmeta : e.getMetaData().getTableMetaData(op.getTableName()).getKeyColumns()) {

sql.append(" and ").append(cmeta.getColumnName()).append("=?");

}

return sql.toString();

}

protected void bindValue(PreparedStatement pstmt, int i,

ColumnMetaData cmeta, DsColumn col) throws SQLException, ParseException {

int jdbcType = cmeta.getDataType().getJDBCType();

if (logger.isDebugEnabled())

logger.debug(new StringBuilder("Bind value for column [").append(cmeta.getColumnName()).append("] Type=").append(cmeta.getDataType()).append(" Value=[").append(col.getValue()).append("]").toString());

if (col.isValueNull()) {

pstmt.setNull(i, jdbcType);

} else if (jdbcType==Types.CHAR || jdbcType==Types.VARCHAR) {

pstmt.setString(i, col.getValue());

} else if (jdbcType==Types.NUMERIC || jdbcType==Types.DECIMAL) {

pstmt.setBigDecimal(i, new BigDecimal(col.getValue()));

} else if (jdbcType==Types.DATE || jdbcType==Types.TIMESTAMP) {

//pstmt.setTimestamp(i, new Timestamp(dateFormat.parse(col.getValue()).getTime()));

pstmt.setString(i, col.getValue());

} else {

pstmt.setObject(i, col.getValue());

}

}

/* (non-Javadoc)

* @see com.goldengate.atg.datasource.AbstractHandler#transactionCommit(com.goldengate.atg.datasource.DsEvent, com.goldengate.atg.datasource.DsTransaction)

*/

@Override

public Status transactionCommit(DsEvent e, DsTransaction tx) {

if (logger.isDebugEnabled())

logger.debug("Method transactionCommit invoked. TxID="+tx.getTranID());

if (conn!=null)

try {

if (batchSize>0 && pstmt!=null) {

executeBatch();

}

conn.commit();

} catch (SQLException ex) {

logger.error("Transaction commit failed. TxID="+tx.getTranID(), ex);

}

return super.transactionCommit(e, tx);

}

/* (non-Javadoc)

* @see com.goldengate.atg.datasource.AbstractHandler#transactionRollback(com.goldengate.atg.datasource.DsEvent, com.goldengate.atg.datasource.DsTransaction)

*/

@Override

public Status transactionRollback(DsEvent e, DsTransaction tx) {

if (logger.isDebugEnabled())

logger.debug("Method transactionRollback invoked. TxID="+tx.getTranID());

if (conn!=null)

try {

conn.rollback();

} catch (SQLException ex) {

logger.error("Transaction rollback failed. TxID="+tx.getTranID(), ex);

}

return super.transactionRollback(e, tx);

}

/* (non-Javadoc)

* @see com.goldengate.atg.datasource.AbstractHandler#reportStatus()

*/

@Override

public String reportStatus() {

logger.debug("Method reportStatus invoked.");

return "SimpleJDBCHandler running...";

}

/* (non-Javadoc)

* @see com.goldengate.atg.datasource.AbstractHandler#destroy()

*/

@Override

public void destroy() {

logger.debug("Handler destroy...");

if (conn!=null)

try {

if (!conn.isClosed()) conn.close();

} catch (SQLException ex) {

logger.error("Connection close failed.", ex);

}

super.destroy();

}

/**

* @return the driver

*/

public String getDriver() {

return driver;

}

/**

* @param driver the driver to set

*/

public void setDriver(String driver) {

this.driver = driver;

}

/**

* @return the url

*/

public String getUrl() {

return url;

}

/**

* @param url the url to set

*/

public void setUrl(String url) {

this.url = url;

}

/**

* @return the arguments

*/

public Properties getArguments() {

return arguments;

}

/**

* @param arguments the arguments to set

*/

public void setArguments(Properties arguments) {

this.arguments = arguments;

}

/**

* @param user the user to set

*/

public void setUser(String user) {

if (arguments==null) {

arguments = new Properties();

}

arguments.setProperty("user", user);

}

/**

* @param password the password to set

*/

public void setPassword(String password) {

if (arguments==null) {

arguments = new Properties();

}

arguments.setProperty("password", password);

}

public void setDateFormat(String pattern) {

dateFormat = new SimpleDateFormat(pattern);

}

/**

* @return the maxBatchSize

*/

public int getMaxBatchSize() {

return maxBatchSize;

}

/**

* @param maxBatchSize the maxBatchSize to set

*/

public void setMaxBatchSize(int maxBatchSize) {

this.maxBatchSize = maxBatchSize;

}

/**

* @return the reportCount

*/

public long getReportCount() {

return reportCount;

}

/**

* @param reportCount the reportCount to set

*/

public void setReportCount(long reportCount) {

if (reportCount<100) {

logger.info("A reportCount less than 100 will turn off report.");

this.reportCount = 0;

} else if (this.reportCount != reportCount) {

this.reportCount = reportCount;

opCount = 0;

lastReportTime = System.currentTimeMillis();

}

}

}

從以上代碼可以看出,可以通過(guò)重載不同的接口函數(shù),獲得事務(wù)、記錄的相關(guān)信息,包括操作的表、時(shí)間、字段、操作類型及變化的數(shù)據(jù)等。

最后是基于此Handler創(chuàng)建一個(gè)測(cè)試類。

TestMariadb

package sample.handler.jdbc;

public class TestMariadb {

public static void main(String[] args) {

SimpleJDBCHandler mariadb = new SimpleJDBCHandler();

gbase.setUrl("jdbc:mariadb://192.168.26.44:5258/mydb? ");

gbase.setDateFormat("com.mariadb.jdbc.Driver");

gbase.setUser("root");

gbase.setPassword("admin123");

}

}


通過(guò)本示例提供的代碼,可以實(shí)現(xiàn)將增量數(shù)據(jù),從OGG的源端,以完全自定義的方式寫入到任何需要的目標(biāo)端。

轉(zhuǎn)載于:https://www.cnblogs.com/margiex/p/8688604.html

與50位技術(shù)專家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的GoldenGate for Java adapter介绍二(代码篇)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

色偷偷88欧美精品久久久 | 久久极品 | 欧美一级片免费观看 | 黄色大全免费观看 | 91成人精品视频 | 777奇米四色| 亚洲欧美乱综合图片区小说区 | 国产九九热视频 | 久久久午夜精品福利内容 | 黄网站色 | 久久电影国产免费久久电影 | 91香蕉视频在线下载 | 在线视频app | 国产专区在线播放 | 丁香婷婷深情五月亚洲 | 操操操夜夜操 | 狠狠操狠狠插 | 最近免费中文字幕mv在线视频3 | 日韩在线视频观看免费 | 在线日韩一区 | 69中文字幕 | 欧美日韩中文在线视频 | 三级av在线 | 天堂va在线高清一区 | 在线国产一区 | 日韩电影中文,亚洲精品乱码 | 亚洲精品在线一区二区 | 日韩午夜小视频 | 精品国产aⅴ一区二区三区 在线直播av | 狠狠色丁香婷婷综合橹88 | 97av视频 | 亚洲国产欧美在线看片xxoo | 欧美极品裸体 | 国产精品va最新国产精品视频 | 探花视频在线观看免费 | 五月黄色 | 日p在线观看| 激情婷婷在线 | 精品国产观看 | 国产亚洲精品久 | 国产理论影院 | 久久综合中文字幕 | 特级黄色片免费看 | 日本久久久久久 | 91麻豆传媒| 天天射天天干天天操 | 97日日碰人人模人人澡分享吧 | 亚洲婷婷综合色高清在线 | 99精品久久久 | 欧美日韩中文国产 | 国内精品久久久精品电影院 | 国产免费a | 91视频在线免费观看 | 免费久久精品视频 | 在线三级播放 | 中文字幕在线不卡国产视频 | 欧洲黄色片 | 四虎成人精品在永久免费 | 午夜影院先 | 超碰人人超 | 欧美日韩一区二区三区在线免费观看 | 久久国产一区二区三区 | 一区二区三区免费看 | 国产高清视频在线播放 | 手机看片久久 | 美女视频黄,久久 | 免费a现在观看 | 玖玖视频国产 | 久久露脸国产精品 | 91在线成人 | 色播激情五月 | 欧美久久久久久久久久久久久 | 亚洲蜜桃av | av国产在线观看 | 激情综合网在线观看 | 国产人成在线观看 | 高清av免费一区中文字幕 | 日韩在线免费观看视频 | 午夜在线观看 | 国产一级在线看 | 亚洲伊人网在线观看 | 国内小视频在线观看 | 成人一级免费视频 | 国产成人一区二区啪在线观看 | 久久视频精品在线观看 | av在线免费播放 | 不卡视频一区二区三区 | 国产精华国产精品 | 亚洲成人精品久久久 | 中文有码在线 | 国产久草在线观看 | 激情综合亚洲精品 | 久久久精品欧美 | 亚洲成人av一区二区 | 久久色在线观看 | 欧美一区三区四区 | 中文在线字幕免费观 | 国产精品免费观看在线 | 91成人网在线播放 | 久久久免费看视频 | 狠狠色丁香久久婷婷综 | 91亚洲精品久久久中文字幕 | 福利一区在线视频 | 在线成人av | 中文字幕亚洲综合久久五月天色无吗'' | 成人黄色一级视频 | 美女天天操 | 国内精品视频一区二区三区八戒 | 免费在线观看av | 天天干夜夜想 | 久久国产精品99久久久久久进口 | 亚洲永久国产精品 | 国产精品一区二区三区视频免费 | 日韩最新在线 | 欧美综合干 | 免费久久99精品国产 | 天天色天天操天天爽 | 欧美性网站 | 欧美久久影院 | 97视频一区| 日韩精品免费在线观看 | 日韩视频一区二区三区 | 亚洲一级影院 | 亚洲精品国产成人 | 国产精品手机在线播放 | 92精品国产成人观看免费 | 免费看黄视频 | 久久精品第一页 | 精品女同一区二区三区在线观看 | 免费亚洲黄色 | av中文字幕在线电影 | 免费观看一区二区 | 亚洲国产精品久久久 | 黄色av一级片 | 亚洲夜夜网 | av中文字幕网 | 五月婷婷.com | 黄色大片免费网站 | 亚洲视屏| 久久99国产精品 | 一二三精品视频 | 亚洲 欧美 国产 va在线影院 | 波多野结衣一区 | www最近高清中文国语在线观看 | 国产涩涩网站 | 亚洲永久精品一区 | 九九视频在线播放 | 欧美日韩精品在线 | 999久久久久久久久6666 | 91麻豆精品 | 97超碰中文字幕 | 六月婷婷久香在线视频 | 91麻豆精品国产91久久久久久久久 | 国产99久久久久 | 中文在线 | 亚洲视频免费在线看 | 午夜视频在线瓜伦 | 免费精品在线观看 | 亚洲天堂网在线视频 | 久久精品久久久精品美女 | 黄色av大片| 日韩精品一区二区在线观看视频 | 日韩精品久久久久久久电影竹菊 | 超级碰碰免费视频 | 99re久久精品国产 | 国产福利网站 | 成人影视免费 | 天天拍天天草 | 在线看国产 | 黄色免费网站 | 精品一区二区三区四区在线 | 久久国产精品免费一区二区三区 | 一区二区视频欧美 | 激情小说网站亚洲综合网 | 午夜视频免费在线观看 | 小草av在线播放 | 91尤物国产尤物福利在线播放 | 日韩三级视频 | 欧产日产国产69 | 女人高潮特级毛片 | 欧美a影视 | 毛片网站免费 | 国产一二三区在线观看 | 狠狠狠狠狠干 | 九九精品久久 | 欧美99久久 | 国产精品日韩 | 久久久精品免费看 | 亚洲成a人片在线www | 日韩二区在线观看 | 色a在线观看 | 又黄又爽的视频在线观看网站 | 日日夜夜噜噜噜 | 91热爆视频 | 日本黄色黄网站 | 日韩精品久久久久久 | 免费视频 你懂的 | 欧美精品一区二区在线观看 | 久久精品看 | 人人躁| 摸bbb搡bbb搡bbbb | 欧美日韩精品在线一区二区 | 久久精品99国产精品酒店日本 | 在线免费观看一区二区三区 | 粉嫩av一区二区三区入口 | 国产在线播放不卡 | 国产精品久久久毛片 | 久久精品精品电影网 | 精品国产午夜 | 成人免费观看在线视频 | 婷婷99 | 91日韩精品| 久久免费视频网 | 97精品国产一二三产区 | 日本最大色倩网站www | 久久国产热 | 91av视频在线观看免费 | 91九色蝌蚪视频在线 | 日韩在线观看一区二区三区 | 久久久久久久久国产 | 麻豆国产在线播放 | 在线播放日韩 | 免费在线看成人av | 91视频免费观看 | 91视频国产免费 | 最新免费av在线 | 日韩精品中文字幕久久臀 | 国产精品女人网站 | 91中文字幕网 | 精品日韩在线一区 | 69av在线视频 | 国产成人香蕉 | 黄色毛片在线看 | 精品久久一级片 | 91传媒在线观看 | 色网站在线观看 | 一二区av | 国产原创91 | 夜夜天天干 | 久久久久久久久久久免费av | 超碰人人国产 | 亚洲欧美国产日韩在线观看 | 久久激情电影 | 亚洲天堂网站视频 | 丁香激情综合久久伊人久久 | 国产女人18毛片水真多18精品 | 国产成人精品久久 | 超碰在线观看av.com | 免费视频你懂得 | 亚洲国产黄色片 | 久艹视频免费观看 | 精品久久网| 在线免费观看黄色av | 天天插综合网 | 国产麻豆精品免费视频 | 九精品 | 狠狠狠干| 搡bbbb搡bbb视频 | 人人爱人人做人人爽 | 国产精品6 | 欧美日韩伦理在线 | 草久久久久 | 开心婷婷色| 91色国产| 在线高清| 啪啪免费视频网站 | 丝袜美腿亚洲 | 成人午夜免费剧场 | 久久这里只有精品9 | 免费在线国产黄色 | 久草精品网 | 香蕉久久久久 | 不卡的av中文字幕 | 中文在线最新版天堂 | 精品在线亚洲视频 | 99久e精品热线免费 99国产精品久久久久久久久久 | wwxxxx日本 | 亚洲视频每日更新 | 国产欧美精品一区二区三区 | 在线播放国产精品 | www.天天草 | 91色一区二区三区 | 欧美性生爱 | 热九九精品 | 国产123区在线观看 国产精品麻豆91 | 久久久久久视频 | 制服丝袜一区二区 | 亚洲2019精品| 香蕉视频在线看 | 国产精品理论在线观看 | 看av在线| 四虎影视久久久 | 黄色成品视频 | 中文字幕免费高清在线观看 | 色婷婷久久久 | 国产视频2021| 国产999久久久 | 亚洲成a人片77777kkkk1在线观看 | 日本韩国精品一区二区在线观看 | 国产 日韩 在线 亚洲 字幕 中文 | 午夜精品视频福利 | av再线观看 | 精品在线一区二区三区 | 色综合亚洲精品激情狠狠 | 亚洲va欧美va人人爽春色影视 | 国产精品久久久久久吹潮天美传媒 | 成年人免费看 | 韩国av一区 | 亚洲综合精品视频 | 91精品国产麻豆 | 精品视频久久久 | 久久桃花网 | 99色婷婷 | 操操操综合 | 免费在线国产黄色 | 一区二区精品视频 | 最近av在线 | 中文字幕视频免费观看 | av在线h| 国产亚洲一级高清 | 一区二区久久久久 | 精品av在线播放 | 久久精品国亚洲 | 九色91视频 | 中文在线字幕免费观 | 成人片在线播放 | 激情在线免费视频 | 欧美激情精品久久久久久变态 | 这里有精品在线视频 | 999成人| 97国产| 69av免费视频| 亚洲欧美国产精品18p | 亚洲高清久久久 | 中文字幕一区二区三区在线播放 | 久久人人射 | 亚州av网站大全 | 国产精品一区二区三区久久久 | 91av短视频| 日韩欧美视频一区 | 日韩午夜电影院 | 91日韩在线视频 | 天天天干天天射天天天操 | 偷拍区另类综合在线 | 午夜三级理论 | 亚洲国产中文字幕在线 | 欧美国产亚洲精品久久久8v | 免费在线观看的av网站 | 最近2019中文免费高清视频观看www99 | 成人日批视频 | 九九热精品视频在线播放 | 欧美性猛片, | 91网免费观看 | 日本最新一区二区三区 | 97人人澡人人添人人爽超碰 | 九色最新网址 | 国产精品久久久久久久久久久免费 | 香蕉视频在线免费 | 久草网站在线观看 | 国产精品亚洲精品 | 黄色大全免费网站 | 最近乱久中文字幕 | 97福利在线观看 | 日韩欧美成 | 欧美激情亚洲综合 | 激情六月婷婷久久 | 国精产品999国精产 久久久久 | 成人在线观看网址 | 国产精品va | 国内精品99| 四虎在线观看网址 | 日本久久片| 午夜国产成人 | 国产高清免费观看 | 久久国产精品久久精品国产演员表 | 精品久久久久久久久久久久久久久久久久 | 国产色网站 | 日韩在线三级 | 天天操天天操一操 | 91福利国产在线观看 | 五月婷av| 91九色在线观看 | 亚洲综合欧美日韩狠狠色 | 中文字幕在线播放av | 久久久污 | 成人精品影视 | 国产成人三级一区二区在线观看一 | 久草免费在线视频 | 国产精品国产三级国产aⅴ入口 | 亚洲 在线 | av福利电影 | 夜夜夜草 | 国产精品18久久久久久久久 | 97视频在线观看成人 | 久久三级视频 | 久久不色 | 麻豆91在线 | 久久国内免费视频 | 91在线www | 国产美女视频免费 | 免费av片在线 | 日韩理论片在线观看 | 久久视精品 | 蜜臀av性久久久久蜜臀aⅴ四虎 | 亚州精品天堂中文字幕 | 免费在线91 | 亚洲欧洲精品视频 | 99热这里只有精品国产首页 | 国产成人在线观看 | 日韩,精品电影 | 亚洲精品美女在线观看播放 | 国产亚洲综合在线 | 欧美老女人xx | 精品一区二区三区久久 | 色综合色综合久久综合频道88 | 国产一区二区精品 | 美女视频黄免费 | 中文在线中文资源 | 国产视频69| 久久天天躁夜夜躁狠狠85麻豆 | 亚洲精品久久久久久中文传媒 | 伊人va| 国产成人三级一区二区在线观看一 | 午夜丰满寂寞少妇精品 | 免费视频久久久久久久 | 欧美激情综合五月色丁香小说 | a黄色 | 麻豆影视在线免费观看 | 亚洲人久久久 | 天天操天天射天天添 | 久久久国产电影 | 成人午夜久久 | 97国产精品视频 | 久久www免费人成看片高清 | 国产福利午夜 | 久av电影| 亚洲激情在线播放 | www.91国产| 午夜影院一级片 | 在线 成人| 欧美日韩观看 | 国产精品自拍av | 精品一区二区免费 | 精品欧美小视频在线观看 | www.亚洲精品在线 | 欧美日韩视频 | 九九久久婷婷 | 久久久久久久久久久久99 | 欧美综合久久久 | 99视频网站 | 狠狠色丁香久久婷婷综合五月 | 91久久国产露脸精品国产闺蜜 | 91尤物国产尤物福利在线播放 | 亚洲精品在线国产 | 成人精品福利 | 国产成人精品av久久 | 欧美日韩视频一区二区三区 | 五月婷婷av | 午夜精品电影 | 三级小视频在线观看 | 欧美日韩在线观看一区 | 国产打女人屁股调教97 | 午夜久久精品 | 视频在线观看日韩 | 久久久久久久国产精品影院 | 中文字幕亚洲在线观看 | 日韩免费一级a毛片在线播放一级 | 国产一区二区精品久久91 | 香蕉一区 | 免费视频久久久 | 亚洲精品大片www | 黄色av电影在线观看 | 日夜夜精品视频 | 美女久久久久 | 久久久久99精品成人片三人毛片 | 国产精品中文字幕在线播放 | 国产精品无av码在线观看 | 国产亚洲婷婷 | 韩国av免费在线 | 91丨九色丨91啦蝌蚪老版 | 精品欧美一区二区在线观看 | 在线观看爱爱视频 | 国产在线污 | 天海翼一区二区三区免费 | 亚洲精品在线免费播放 | 一级欧美黄 | 天天爱天天射天天干天天 | 国产日韩在线一区 | 免费看黄视频 | 国产成人99av超碰超爽 | 国精产品999国精产品岳 | 四虎小视频| 日韩综合一区二区三区 | 91色蜜桃| 美女黄频在线观看 | 久久在线精品 | 国产夫妻性生活自拍 | 国产理论免费 | 国产亚洲成av人片在线观看桃 | 国产91区 | 国产精品欧美激情在线观看 | 欧美激情综合色综合啪啪五月 | 五月精品 | 亚洲专区在线播放 | 日韩在线在线 | 国产成人一区二区三区在线观看 | 激情综合五月 | 国产视频亚洲视频 | 午夜精品一区二区三区可下载 | 天天色天天操天天爽 | 99视频精品免费观看, | 干狠狠| 欧美一级高清片 | 成人a在线观看高清电影 | 日韩久久一区二区 | 免费看片日韩 | 日本黄色免费播放 | 中文字幕你懂的 | www.天天干 | 久久成人精品视频 | 亚洲激情影院 | 国产精品美女www爽爽爽视频 | 日韩久久视频 | 免费久久网站 | 免费色网 | a级片网站 | 国产精品手机在线观看 | 亚洲三级黄色 | 91在线免费视频 | 国产午夜一区二区 | 国产va在线观看免费 | 91免费高清观看 | 4438全国亚洲精品在线观看视频 | 欧美国产视频在线 | 99爱精品视频 | 91亚瑟视频 | 日韩精品综合在线 | 久久久精品国产一区二区电影四季 | 国产精品成人一区二区 | 91麻豆精品国产自产在线 | 欧美精品久久久久久久 | 玖草影院| 深夜免费福利 | 欧美一级性生活 | 欧美日韩中文国产一区发布 | 欧美福利精品 | 黄色a在线 | 久久中文字幕视频 | 综合久久久久久久 | 在线电影 一区 | 亚洲午夜精品福利 | 久久精品日产第一区二区三区乱码 | 最近中文字幕免费视频 | 精品国产电影一区 | 婷婷丁香花五月天 | 久久综合之合合综合久久 | 丝袜足交在线 | 激情偷乱人伦小说视频在线观看 | 国产裸体永久免费视频网站 | 精品国产亚洲在线 | 中日韩男男gay无套 日韩精品一区二区三区高清免费 | 不卡的av | 夜色资源站wwwcom | 国产美女精品视频免费观看 | 香蕉精品视频在线观看 | 六月婷婷网 | 国产精品原创av片国产免费 | 久久永久视频 | 国产偷v国产偷∨精品视频 在线草 | 久久天堂精品视频 | 日韩有码在线观看视频 | 成人免费在线看片 | 日b黄色片 | 伊人色播 | 香蕉视频在线视频 | 亚洲精品 在线视频 | 免费视频三区 | 久久久91精品国产一区二区精品 | 黄色av一级| 狠狠躁夜夜躁人人爽视频 | 国产剧情一区在线 | 久久视频免费在线 | 久久久免费电影 | 国产精品久久久久久久久婷婷 | 九九热1| 美女视频国产 | 国内精品久久久久久久久久 | 黄色影院在线免费观看 | 日韩欧美精品在线观看视频 | 亚洲免费视频在线观看 | 91资源在线视频 | 国产成人久久精品亚洲 | 99久久精| 毛片3| 久久免费看毛片 | 婷婷国产v亚洲v欧美久久 | 色五月色开心色婷婷色丁香 | 精品久久久久久国产91 | 欧美伦理电影一区二区 | 曰韩精品 | 欧美日韩3p | 婷婷成人亚洲综合国产xv88 | 欧美久草网 | 亚洲精选99 | 草久久久久久 | 热99在线| 摸阴视频 | 激情综合亚洲精品 | 久久在线观看 | 91在线超碰 | 日韩精品黄 | 99久久婷婷国产精品综合 | 欧美激情视频一二三区 | 中文字幕中文字幕在线中文字幕三区 | 激情五月网站 | 午夜久久久久久久久久影院 | 亚洲成av片人久久久 | 免费精品人在线二线三线 | 欧美精品三级 | 91视频在线观看免费 | 国产亚洲精品久久久久久网站 | 国产91学生| 国产成人三级在线观看 | 开心激情五月网 | 五月婷婷综合在线视频 | 日日麻批40分钟视频免费观看 | 久草在线电影网 | 最近中文字幕视频完整版 | 国产成人精品免费在线观看 | 日日日网| 精品一区二区三区香蕉蜜桃 | 久久综合九色综合欧美就去吻 | 精品免费国产一区二区三区四区 | 91精品国产乱码 | 中文字幕色在线视频 | 婷婷久久综合九色综合 | 久久久久网站 | 成年人视频在线免费观看 | 国产高清成人av | 国产精品永久在线观看 | 五月天亚洲婷婷 | 免费日韩电影 | 久久免费黄色大片 | 96在线| 亚洲精品中文字幕在线 | 美女av电影| 久久伦理视频 | 天天干天天综合 | 精品一区91 | 丁香色婷| 中文字幕频道 | 亚洲男男gaygay无套同网址 | 午夜精品在线看 | 久久艹艹 | 亚洲日本激情 | 日韩中文字幕免费 | 亚洲 欧洲 国产 精品 | 中文字幕精品www乱入免费视频 | 免费福利小视频 | 亚州精品一二三区 | 久精品视频| 成年性视频 | 麻豆视频免费版 | 激情视频网页 | 色婷婷激婷婷情综天天 | 日韩在线视频在线观看 | 波多野结衣视频一区二区三区 | 91污在线观看 | 日韩电影在线一区二区 | 国产精品都在这里 | 欧美久久久| 国产精品91一区 | 午夜精品一区二区三区视频免费看 | 天堂久久电影网 | 波多野结衣一区 | 中文字幕在线观看视频一区二区三区 | 色综合天天 | 欧美xxxxx在线视频 | 人人插人人玩 | 香蕉久久久久 | 在线观看免费福利 | 国产欧美精品一区二区三区四区 | 在线观看完整版 | 亚洲国产wwwccc36天堂 | 欧美精品乱码久久久久久按摩 | 夜又临在线观看 | 久久综合久久综合这里只有精品 | 在线视频日韩 | 黄色三级免费网址 | 在线播放国产精品 | 久久蜜桃av | 五月激情丁香婷婷 | 久久免费福利视频 | 丁香六月网| 成年人天堂com | 久久精品一区二区国产 | 色综合天天干 | 99热官网| 又爽又黄又无遮挡网站动态图 | 久久久久久久国产精品视频 | 国产伦理一区二区 | 婷婷深爱激情 | av3级在线 | 成年人黄色av | 久久不射电影网 | 亚洲精品天天 | 免费看黄色小说的网站 | 99理论片 | 99久久精品费精品 | 高清在线一区 | 操操综合 | 91人人揉日日捏人人看 | 国产精品免费在线播放 | 亚洲 欧美变态 另类 综合 | 日韩精品 在线视频 | 久久成熟| 国产黑丝一区二区三区 | 免费日p视频 | 欧美精选一区二区三区 | 黄色av一区二区三区 | 亚洲黄网址 | 三级a视频 | 美女网站色在线观看 | 色婷婷丁香 | 免费电影播放 | 不卡视频一区二区三区 | 日韩三级中文字幕 | 一区二区三区在线视频111 | 久久久精品国产免费观看一区二区 | 精品视频久久久久久 | 免费人成在线观看网站 | 久久精品999| 亚洲欧美激情插 | 国产精品激情偷乱一区二区∴ | 91在线播 | 99九九99九九九视频精品 | 新版资源中文在线观看 | 深爱激情婷婷网 | 在线看成人片 | 日本三级全黄少妇三2023 | 天天射天天射天天射 | 国产在线超碰 | 美女久久久久久 | 国产精品福利无圣光在线一区 | 精品国产乱码久久久久久1区2匹 | 日韩欧美高清一区二区三区 | www.在线观看av | 91精品一区国产高清在线gif | 在线看片一区 | 国产黄av | 天堂久色 | 在线免费观看不卡av | 成人小电影在线看 | 中文字幕黄色网址 | 亚洲国产视频网站 | 天天操天天射天天爽 | 日韩精品一区二区在线视频 | 婷婷综合导航 | 国产精品精品国产婷婷这里av | 婷婷色狠狠 | 激情综合网五月激情 | 91九色视频在线观看 | 国产综合婷婷 | 日日婷婷夜日日天干 | 国产亚洲婷婷免费 | 欧美日韩免费观看一区=区三区 | 亚洲天天在线日亚洲洲精 | 黄色软件大全网站 | 日韩免费小视频 | www免费网站在线观看 | 日本久久精品 | 一区二区中文字幕在线观看 | 九九久久国产 | 青春草视频在线播放 | 国产人免费人成免费视频 | 天天操狠狠操夜夜操 | 国产精品久久久久四虎 | 99综合电影在线视频 | 成人免费在线视频 | 日韩一级黄色片 | 欧美黄色软件 | 午夜视频在线瓜伦 | 国产精品久久久 | 成人羞羞视频在线观看免费 | 69亚洲乱| 久久99精品国产99久久 | 婷婷av电影 | 在线观看免费av网站 | 精品国产乱码久久久久 | 韩国在线视频一区 | 免费高清在线观看成人 | 欧美一区成人 | 欧美做受高潮电影o | 久久综合狠狠 | 91 中文字幕 | 一区二区三区在线观看 | 精品国产免费一区二区三区五区 | 久久午夜精品影院一区 | 久久综合狠狠综合 | 欧美成人基地 | 国产午夜精品理论片在线 | 在线激情av电影 | 91大神在线看 | 成人资源在线播放 | 亚洲视频一级 | 国产小视频你懂的 | 欧美一区二区在线刺激视频 | 久久成人在线 | 国产高清视频在线免费观看 | 四虎影视成人永久免费观看亚洲欧美 | 日韩欧美综合精品 | 色婷婷福利视频 | 一区在线电影 | 天天操天天怕 | 久久只精品99品免费久23小说 | 人人玩人人添人人澡97 | 欧美日韩性 | 日av免费| 欧美精品久| 天天激情综合 | 精品视频在线看 | 在线观看亚洲国产精品 | 日韩欧美高清在线观看 | 91精品视频在线免费观看 | 日本最新中文字幕 | 久久不射影院 | 天天骚夜夜操 | 麻豆国产视频下载 | 日本爽妇网 | 日本精品一 | 亚洲免费av网站 | 国产成人在线综合 | 一区二区三区高清在线 | 午夜国产福利在线 | 69视频网站 | 精品久久一区 | 亚洲精品视频网 | 天天躁天天狠天天透 | 中文字幕人成乱码在线观看 | 99久久婷婷国产综合精品 | 欧美精品日韩 | 亚洲成av人片在线观看香蕉 | 少妇自拍av | 欧美精品国产综合久久 | 亚洲精品国产精品国 | 9999在线 | 久久黄色网址 | 91人人澡| 综合激情| 亚洲综合在线一区二区三区 | 国产精品嫩草影院9 | 91视频亚洲 | 国产裸体视频bbbbb | 久久99视频免费观看 | 波多野结衣一区二区三区中文字幕 | 91精品视频网站 | 日本久久免费电影 | 欧美中文字幕第一页 | 亚洲区视频在线观看 | 在线免费观看av网站 | 草久中文字幕 | 中文av影院 | 91视频中文字幕 | 国产一级片视频 | 91精品国产成 | 免费在线观看黄色网 | 国产99久久久精品 | 久久久久久久久久电影 | 国产精品人成电影在线观看 | 超碰在线观看97 | 成年人在线免费看视频 | 亚洲午夜久久久久久久久久久 | 国内精品久久久久久久久久清纯 | 特黄一级毛片 | 国产一区二区免费 | 日韩在线高清视频 | 国产91在线播放 | 婷婷激情网站 | 国产视频午夜 | 超薄丝袜一二三区 | 精品亚洲欧美一区 | 色在线免费视频 | 国产精品综合久久久久 | 成人av影视 | 精品国产乱码久久久久久久 | 久久久国产一区二区 | 中文字幕在线观看第三页 | 久久视了 | 亚洲春色奇米影视 | 欧美色就是色 | 黄色小网站在线观看 | 操处女逼 | 国产女人18毛片水真多18精品 | 日韩欧美视频免费看 | 日韩精品视频网站 | 国产精品国产三级在线专区 | 久久欧美在线电影 | 国产精品a久久 | 亚洲视频高清 | 在线小视频你懂的 | 99草在线视频 | 天天干天天看 | 99精品视频免费在线观看 | 国产xx视频| 国产老熟 | 成人在线视频观看 | 午夜国产一区二区三区四区 | 六月丁香婷婷久久 | 中文字幕在线观看一区二区 | 91视频在线看 | 久久视频在线看 | 在线看成人片 | 人人爽人人爱 | 午夜精品视频一区二区三区在线看 | 日韩免费在线视频观看 | 国内精品久久久久久久影视简单 | 日本中文字幕一二区观 | 久久一级电影 | 久久国产一区二区三区 | 久久精品艹 | 欧美精品在线观看免费 | 五月在线 | 中文字幕av在线电影 | 欧美激情综合五月色丁香 | 久久视| 日韩69av | 久久99久久99 | 午夜精品久久久久久久爽 | 天天草视频 | 日韩黄色av网站 | 久久成人国产 | 日韩免费在线观看网站 | av在线短片 | 亚洲 欧洲av| 激情婷婷综合 | 中文字幕乱码在线播放 | 国产高清在线免费观看 | 偷拍精偷拍精品欧洲亚洲网站 | 国产美女被啪进深处喷白浆视频 | 夜添久久精品亚洲国产精品 | 高清中文字幕av | 成人av一区二区在线观看 | 超碰97中文| www.一区二区三区 | 免费在线激情电影 | 亚洲电影在线看 | 操天天操| 免费情趣视频 | 精品伦理一区二区三区 | 国色天香av| 一区二区三区高清不卡 | 日韩精品免费在线视频 | 日韩三级久久 | 亚洲资源片 | 欧美在线视频免费 | 国产精品1000 | 美女免费网站 | 日韩精品一区二区三区视频播放 | 色夜视频| 91一区啪爱嗯打偷拍欧美 | 国产乱老熟视频网88av | 综合激情久久 | 在线观看播放av | 中文字幕一区在线观看视频 | 干干日日 | 国产91九色蝌蚪 | 91精品视频观看 | 色偷偷88888欧美精品久久 | 久久欧美在线电影 | 色吊丝在线永久观看最新版本 | 香蕉视频免费在线播放 | 久久久免费视频播放 | 色狠狠操 | 久久精品电影院 | 婷婷在线免费观看 | 精品视频在线免费观看 | 成人va天堂 | 激情av五月婷婷 | 日本精品视频免费 | 亚洲精品国产自产拍在线观看 | 久久视精品 | 在线免费观看国产 | 综合精品久久久 | www视频在线播放 | 在线日本看片免费人成视久网 | 国产精品国产三级国产aⅴ无密码 | 中文字幕一区二区在线播放 | 午夜视频在线观看一区二区 | 亚洲激情久久 | 精品久久久久久久久久久久久久久久久久 | 久草99| 日韩二区在线 | 激情综合色综合久久综合 | 超碰人人草人人 | 中文字幕一区二区三区在线观看 | 亚洲免费永久精品国产 | 五月婷婷激情网 | 99久久综合狠狠综合久久 |