亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數(shù)據(jù)庫 > Oracle > 正文

在Spring中用select last_insert_id()時遇到問題

2020-07-26 14:35:11
字體:
供稿:網(wǎng)友
今天在使用MySQL時卻不知如何處理,插入記錄后不知怎樣獲得剛剛插入的id,查過文檔后發(fā)現(xiàn)了select last_insert_id(),在插入之后執(zhí)行此查詢,即可獲得自增id,喜出望外。
可用到自己的程序中之后卻得不到想要的結(jié)果,于是就懷疑到了Spring頭上,因為通過基本JDBC測試是沒有任何問題的,所以就去跟蹤Spring JDBC, 看過源碼之后才豁然開朗,原來Spring中如此獲得數(shù)據(jù)庫Connection的:Connection con DataSourceUtils.getConnection(getDataSource());, 哎,只能怪自己Spring掌握不夠好,所以就不能在執(zhí)行insert之后去執(zhí)行select last_insert_id()了,因為select last_insert_id()是真對當前Connection插入和更新操作的,那在Spring中如何獲得新增記錄的鍵值呢,沒有辦法只能去Google了。

發(fā)現(xiàn)了如下文章,來自IT168,標題為《Spring應(yīng)用數(shù)據(jù)主鍵的生成策略盤點》,摘錄如下:


    在一般情況下,在新增領(lǐng)域?qū)ο蠛螅夹枰@取對應(yīng)的主鍵值。使用應(yīng)用層來維護主鍵,在一定程度上有利于程序性能的優(yōu)化和應(yīng)用移植性的提高。在采用數(shù)據(jù)庫自增主鍵的方案里,如果JDBC驅(qū)動不能綁定新增記錄對應(yīng)的主鍵,就需要手工執(zhí)行查詢語句以獲取對應(yīng)的主鍵值,對于高并發(fā)的系統(tǒng),這很容易返回錯誤的主鍵。通過帶緩存的DataFieldMaxValueIncrementer,可以一次獲取批量的主鍵值,供多次插入領(lǐng)域?qū)ο髸r使用,它的執(zhí)行性能是很高的。

使用數(shù)據(jù)庫的自增主鍵
    我們經(jīng)常使用數(shù)據(jù)的自增字段作為表主鍵,也即主鍵值不在應(yīng)用層產(chǎn)生,而是在新增記錄時,由數(shù)據(jù)庫產(chǎn)生。這樣,應(yīng)用層在保存對象前并不知道對象主鍵值,而必須在保存數(shù)據(jù)后才能從數(shù)據(jù)庫中返回主鍵值。在很多情況下,我們需要獲取新對象持久化后的主鍵值。在Hibernate等ORM框架,新對象持久化后,Hibernate會自動將主鍵值綁定到對象上,給程序的開發(fā)帶來了很多方便。

    在JDBC 3.0規(guī)范中,當新增記錄時,允許將數(shù)據(jù)庫自動產(chǎn)生的主鍵值綁定到Statement或PreparedStatement中。使用Statement時,可以通過以下方法綁定主鍵值:
int executeUpdate(String sql,int autoGeneratedKeys)
也可以通過Connection創(chuàng)建綁定自增值的PreparedStatement:
PreparedStatement prepareStatement(String sql, int autoGeneratedKeys)

    當autoGeneratedKeys參數(shù)設(shè)置為Statement.RETURN_GENERATED_KEYS值時即可綁定數(shù)據(jù)庫產(chǎn)生的主鍵值,設(shè)置為Statement.NO_GENERATED_KEYS時,不綁定主鍵值。下面的代碼演示了Statement綁定并獲取數(shù)據(jù)庫產(chǎn)生的主鍵值的過程:
Statement stmt = conn.createStatement(); String sql = "INSERT INTO t_topic(topic_title,user_id) VALUES(‘測試主題','123') "; stmt.executeUpdate(sql,Statement.RETURN_GENERATED_KEYS); ①指定綁定表自增主鍵值 ResultSet rs = stmt.getGeneratedKeys(); if ( rs.next() ) { int key = rs.getInt();②獲取對應(yīng)的表自增主鍵值 }



Spring利用這一技術(shù),提供了一個可以返回新增記錄對應(yīng)主鍵值的方法:
int update(PreparedStatementCreator psc, KeyHolder generatedKeyHolder)
org.springframework.jdbc.support.KeyHolder是一個回調(diào)接口,Spring使用它保存新增記錄對應(yīng)的主鍵,該接口的接口方法描述如下:
 Number getKey() throws InvalidDataAccessApiUsageException
當 僅插入一行數(shù)據(jù),主鍵不是復(fù)合鍵且是數(shù)字類型時,通過該方法可以直接返回新的主鍵值。如果是復(fù)合主鍵,或者有多個主鍵返回時,該方法拋出 InvalidDataAccessApiUsageException。該方法是最常用的方法,因為一般情況下,我們一次僅插入一條數(shù)據(jù)并且主鍵字段類型為數(shù)字類型;

 Map getKeys() throws InvalidDataAccessApiUsageException
如果是復(fù)合主鍵,則列名和列值構(gòu)成Map中的一個Entry。如果返回的是多個主鍵,則該方法拋出InvalidDataAccessApiUsageException異常;

 List getKeyList():
如果返回多個主鍵,即PreparedStatement新增了多條記錄,則每一個主鍵對應(yīng)一個Map,多個Map構(gòu)成一個List。

    Spring為KeyHolder接口指代了一個通用的實現(xiàn)類GeneratedKeyHolder,該類返回新增記錄時的自增長主鍵值。假設(shè)我們希望在新增論壇板塊對象后,希望將主鍵值加載到對象中,則可以按以下代碼進行調(diào)整:

 
public void addForum(final Forum forum) { final String sql = "INSERT INTO t_forum(forum_name,forum_desc) VALUES(?,?)"; KeyHolder keyHolder = new GeneratedKeyHolder();①創(chuàng)建一個主鍵執(zhí)有者 getJdbcTemplate().update(new PreparedStatementCreator(){ public PreparedStatement createPreparedStatement(Connection conn) throws SQLException { PreparedStatement ps = conn.prepareStatement(sql); ps.setString(1, forum.getForumName()); ps.setString(2, forum.getForumDesc()); return ps; } },keyHolder); forum.setForumId(keyHolder.getKey().intValue());②從主鍵執(zhí)有者中獲取主鍵 }

     這樣,在調(diào)用addForum(final Forum forum)新增forum領(lǐng)域?qū)ο蠛螅琭orum將擁有對應(yīng)的主鍵值,方便后繼的使用。
在JDBC 3.0之前的版本中,PreparedStatement不能綁定主鍵,如果采用表自增鍵(如MySql的auto increment或SqlServer的identity)將給獲取正確的主鍵值帶來挑戰(zhàn)――因為你必須在插入數(shù)據(jù)后,馬上執(zhí)行另一條獲取新增主鍵的查詢語句。表 1給出了不同數(shù)據(jù)庫獲取最新自增主鍵值的查詢語句:
       表 1 不同數(shù)據(jù)庫獲取新增加的主鍵值 

 

數(shù)據(jù)庫
獲取新增主鍵的查詢語句
DB2
IDENTITY_VAL_LOCAL()
Informix
SELECT dbinfo('sqlca.sqlerrd1') FROM <TABLE>
Sybase
SELECT @@IDENTITY
SqlServer
SELECT SCOPE_IDENTITY()或SELECT @@IDENTITY
MySql
SELECT LAST_INSERT_ID()
HsqlDB
CALL IDENTITY()
Cloudscape
IDENTITY_VAL_LOCAL()
Derby
IDENTITY_VAL_LOCAL()
PostgreSQL
SELECT nextval('<TABLE>_SEQ')
   
    如果數(shù)據(jù)庫的并發(fā)率很高,比如在插入記錄后執(zhí)行查詢主鍵之前,數(shù)據(jù)庫又執(zhí)行了若干條插入記錄的SQL語句,這時,通過表 1 返回的主鍵值就是最后一條插入語句的主鍵值,而非我們希望的主鍵值了。所以使用查詢語句獲取表自增鍵值是不安全的,這也是為什么有些數(shù)據(jù)庫(如 Oracle、Firebird)故意不提供自增鍵,而只提供序列的原因,序列強制要求你在新增記錄前,先獲取主鍵值。Oracle通過SELECT <SEQUENCE_NAME>.nextval FROM DUAL獲取序列的下一個值,而FireBird通過SELECT GEN_ID(<SEQUENCE_NAME> 1) FROM RDB$DATABASE獲取序列的下一個值。在10.4.1小節(jié)中,我們還將講解應(yīng)用層自增鍵的相關(guān)知識。


應(yīng)用層產(chǎn)生主鍵
    Spring JDBC提供了自增鍵以及行集的支持,自增鍵對象讓我們可以不依賴數(shù)據(jù)庫的自增鍵,在應(yīng)用層為新記錄提供主鍵值。在JDK 1.4中引入了RowSet,它允許在連接斷開的情況下操作數(shù)據(jù),在這節(jié)里,我們將介紹如何在Spring JDBC中使用RowSet。

自增鍵的使用
    一般數(shù)據(jù)庫都提供了自增鍵的功能,如MySql的auto_increment、SqlServerr的identity字段等。Spring允許你在應(yīng)用層產(chǎn)生主鍵值,為此定義了 org.springframework.jdbc.support.incrementer.DataFieldMaxValueIncrementer 接口,提供兩種產(chǎn)生主鍵的方案:第一,通過序列產(chǎn)生主鍵;第二,通過表產(chǎn)生主鍵。根據(jù)主鍵產(chǎn)生方式和數(shù)據(jù)庫的不同,Spring提供了若干實現(xiàn)類,如圖 1所示: 

      圖 1 DateFieldValueIncrementer繼承類圖
    根據(jù)不同的主鍵產(chǎn)生方式,可能需要配置表名、主鍵字段名或序列名等信息。下面,我們以O(shè)racle和MySql為例分別講解使用序列及表字段產(chǎn)生主鍵值的方式。

DataFieldMaxValueIncrementer接口定義了3個獲取下一個主鍵值的方法:
 int nextIntValue():獲取下一個主鍵值,主鍵數(shù)據(jù)類型為int;
 long nextLongValue():獲取下一個主鍵值,主鍵數(shù)據(jù)類型為long;
 String nextStringValue():獲取下一個主鍵值,主鍵數(shù)據(jù)類型為String;
    在其抽象實現(xiàn)類AbstractDataFieldMaxValueIncrementer中,提供了幾個重要的屬性,其中 incrementerName定義序列或主鍵表的名稱;如果返回的主鍵是String類型,則paddingLength屬性可能會派上用場,它允許你指定返回主鍵的長度,不足的部分前面補0。

    HsqlMaxValueIncrementer和MySQLMaxValueIncrementer兩個主鍵值產(chǎn)生器基于表進行工作。通過 columnName屬性定義主鍵列的名字,通過cacheSize屬性定義緩存的主鍵個數(shù),當內(nèi)存中的主鍵值用完后,產(chǎn)生器將一次性獲取 cacheSize個主鍵,這樣可以減少數(shù)據(jù)訪問的次數(shù),提高應(yīng)用的性能。

    我們通過DateFieldValueIncrementer從數(shù)據(jù)庫中獲取主鍵值來彌補這個缺陷。首先,調(diào)整PostJdbcDao的代碼,添加DateFieldValueIncrementer屬性,并通過它從序列中得到下一個主鍵值:
    代碼清單 13 使用DateFieldValueIncrementer產(chǎn)生主鍵
 
public class PostJdbcDao extends JdbcDaoSupport implements PostDao { private DataFieldMaxValueIncrementer incre; ①主鍵值產(chǎn)生器 public void addPost(final Post post) { … getJdbcTemplate().execute( sql,new AbstractLobCreatingPreparedStatementCallback( this.lobHandler) { protected void setValues(PreparedStatement ps, LobCreator lobCreator) throws SQLException { ps.setInt(1, incre.nextIntValue());②獲取下一個主鍵值 … } }); } …//省略get/setter方法 }

在②處,我們通過incre.nextIntValue()獲取下一個主鍵值。


以序列方式產(chǎn)生主鍵值
    在Oracle數(shù)據(jù)庫中創(chuàng)建一個seq_post_id序列,使用這個序列為t_post提供主鍵值,以下是創(chuàng)建seq_post_id的腳本: 
 
create sequence seq_post_id increment by 1start with 1;


   接著,調(diào)整Spring的配置,使用OracleSequenceMaxValueIncrementer作為主鍵產(chǎn)生器:

 
<bean id="incre" class="org.springframework.jdbc.support.incrementer.OracleSequenceMaxValueIncrementer"><property name="incrementerName" value="seq_post_id"/> ①指定序列名 <property name="dataSource" ref="dataSource"/> ②設(shè)置數(shù)據(jù)源 </bean><bean id="postDao" parent="dao" class="com.baobaotao.dao.jdbc.PostJdbcDao"><property name="lobHandler" ref="oracleLobHandler"/><property name="incre" ref="incre"/> ③添加主鍵主鍵產(chǎn)生器 </bean>

  以表方式產(chǎn)生主鍵值 
 在Mysql中創(chuàng)建一張用于維護t_post主鍵的t_post_id表,以下是創(chuàng)建該表及插入初始化的SQL腳本:

 
create table t_post_id(sequence_id int) type = MYISAM;
insert into t_post_id values(0
);

    由于主鍵維護表的并發(fā)訪問量很大,所以最好將其聲明為MYISAM類型,此外需要為該表提供初始值,以便后續(xù)主鍵值在此之上進行遞增。
調(diào)整為MySql數(shù)據(jù)庫后,我們僅需要對Spring配置進行小小的調(diào)整就可以了:

 
<bean id="incre"class="org.springframework.jdbc.support.incrementer.MySQLMaxValueIncrementer"><property name="incrementerName" value="t_post_id"/> ①設(shè)置維護主鍵的表名 <property name="columnName" value="sequence_id"/>②用于生成主鍵值的列名 <property name="cacheSize" value="10"/> ③緩存大小 <property name="dataSource" ref="dataSource"/></bean><bean id="postDao" parent="dao" class="com.baobaotao.dao.jdbc.PostJdbcDao"><property name="lobHandler" ref="defaultLobHandler"/><property name="incre" ref="incre"/></bean>
    incrementerName和columnName都很容易理解,cacheSize決定一次返回的主鍵個數(shù),這里我們設(shè)置為10。當?shù)谝淮瓮ㄟ^ MySQLMaxValueIncrementer# nextIntValue()獲取主鍵值時,MySQLMaxValueIncrementer將使t_post_id. sequence_id遞增10,而后續(xù)9次調(diào)用nextIntValue()方法時,都從緩存中獲取主鍵值。直到第10次再次調(diào)用 nextIntValue()方法時,才會再次將t_post_id. sequence_id字段值遞增10,如此循環(huán)反復(fù)。

小結(jié)
    主鍵的生產(chǎn)方式從產(chǎn)生地點上可以分為應(yīng)用層產(chǎn)生和數(shù)據(jù)庫產(chǎn)生兩種方式。應(yīng)用層借助數(shù)據(jù)庫的序列或表產(chǎn)生主鍵,這種方式可以保證程序的可移植性和安全性,同時可以通過緩存機制提高運行效率。有些數(shù)據(jù)庫支持數(shù)據(jù)表自增鍵的主鍵產(chǎn)生機制,在JDBC 3.0以前的版本中,無法通過Statement自動獲取新增記錄的對應(yīng)主鍵。這時需要在插入數(shù)據(jù)后,馬上執(zhí)行一條數(shù)據(jù)庫相關(guān)的主鍵獲取SQL語句以得到對應(yīng)的主鍵值,在數(shù)據(jù)庫高并發(fā)的情況下,有可能獲取到不正確的主鍵值。在這種情況下,在插入數(shù)據(jù)前事先在應(yīng)用層準備好主鍵值是很好的備選方案。


另外補充一點在SqlUpdate執(zhí)行update之前需設(shè)置setReturnGeneratedKeys(true);
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
欧美videofree性高清杂交| 成人天堂yy6080亚洲高清| 懂色av一区二区夜夜嗨| 国产成人自拍高清视频在线免费播放| jjzzjjzz欧美69巨大| 顶级黑人搡bbw搡bbbb搡| 91在线小视频| 欧美视频一区二区三区…| 免费日韩电影在线观看| av免费观看大全| 中文字幕欧美日韩在线不卡| 女性女同性aⅴ免费观女性恋| 日本黄网站色大片免费观看| 日韩在线视频中文字幕| 精品毛片久久久久久| 625成人欧美午夜电影| 狠狠色狠狠色综合网| 久久国产香蕉视频| 尤物视频免费| 国产精品久久久久久99| 含羞草久久爱69一区| 亚洲福利天堂| 国产人妻黑人一区二区三区| 一区二区三区在线看| juy有坂深雪中文字幕| 日韩a级作爱片一二三区免费观看| 青青草原av在线播放| 91午夜视频在线观看| 免费看a在线观看| www.555国产精品免费| 嫩草影院视频| 久久久精品国产99久久精品芒果| 青青操在线观看| 亚洲视频国产| 在线h片观看| 天天摸天天操天天干| 高清shemale亚洲人妖| 国产伦精品一区二区三区视频网站| 中文字幕欧美视频| 伊人久久综合视频| 免费91麻豆精品国产自产在线观看| 国产精品嫩草影院在线看| 日日噜噜噜夜夜爽亚洲精品| 亚洲黄色在线观看视频| 国产日韩av在线播放| 捆绑紧缚一区二区三区在线观看| 久久美女福利视频| 老熟妇高潮一区二区三区| 男女视频网站在线观看| 日韩欧美国产1| 成人亚洲网站| 午夜精品久久久久久久第一页按摩| 69av自拍偷拍| 久久综合九色综合欧美98| 日韩欧美国产电影| 一区二区三区在线不卡| 国产精品传媒| 4444免费观看| 国产精品美女视频免费观看软件| 高清国产在线一区| crdy在线观看欧美| 91精品国产综合久久久久久漫画| 精品一区二区三区无码视频| 国产精品99久久久久久宅男| 国产一区二区在线观看免费视频| 久久91亚洲精品中文字幕奶水| 欧美残忍xxxx极端| 久久久国际精品| 欧美一区二区麻豆红桃视频| 国产精品二线| 国产精品毛片大码女人| 欧美xxxx做受欧美.88| 麻豆短视频在线观看| 日本免费三片免费观看| 国产在线国偷精品免费看| 中文字幕 亚洲视频| 亚洲女同在线| 3d动漫成人在线| 在线成人福利| 午夜视频在线观| 欧美顶级毛片在线播放| 国产模特精品视频久久久久| 亚洲国产欧美一区二区丝袜黑人| 日韩一区二区三区精品| 亚洲线精品久久一区二区三区| 欧美激情视频二区| 日韩精品免费在线视频观看| 亚洲精品wwwww| 亚洲一级毛片| 亚洲综合图片| 乱一区二区三区在线播放| 欧美日韩国产欧美日美国产精品| 99999色| 色偷偷中文字幕| 亚洲精品美女视频| 国产女人爽到高潮a毛片| 欧美久久精品一级黑人c片| 午夜免费精品视频| 亚洲精品自拍网| 自拍亚洲国产| 国产一级网站视频在线| 香蕉视频色版| 四虎影视精品永久在线观看| 色哟哟国产精品免费观看| 日韩欧美aⅴ综合网站发布| 亚洲精选在线| 999色成人| jizz免费观看视频| 亚洲欧美日韩精品一区| 亚洲一区二区美女| 欧美大片xxxx| 最近中文字幕免费视频| 色偷偷中文字幕| 亚洲天堂小视频| 人人影院免费大片| 亚洲欧洲日本精品| 国产一级二级视频| 又爽又黄的午夜网站| 艳妇乳肉豪妇荡乳xxx| 一本色道综合亚洲| 最近中文字幕在线观看视频| 免费观看一级视频| 免费精品视频最新在线| 欧美专区日韩专区| 亚洲一区精品在线| 日韩av官网| 国产成人在线网站| www.国产精品一二区| 国产一区不卡在线观看| 国产精品815.cc红桃| 日韩美女主播视频| 亚洲午夜久久久久久久久电影网| 欧美www视频在线观看| 亚洲欧洲在线一区| 欧美精品偷拍| 国产精品videossex| 国产一区二区丝袜高跟鞋图片| 久久久久久久久久久久久夜| 99视频一区二区| 玖玖精品在线视频| 亚洲电影欧美电影有声小说| 免费看美剧网站| 在线欧美福利| 91传媒在线观看| 免费观看美女裸体网站| 亚洲第一第二区| 国产女主播一区二区| 日韩子在线观看| 日韩在线激情| 久久精品亚洲成在人线av网址| 欧美 国产 日本| 麻豆久久久9性大片| 日韩一区二区三免费高清| 欧美一区二区三区思思人| av网站免费| 欧美一级特黄aaaaaa| 91蝌蚪精品视频| 国产精品一区二区三区av| 91免费小视频| 日韩av免费一区| 久久综合久久综合久久| 国产成人自拍网站| 青青草视频免费在线观看| 精品无码久久久久| 日本电影中文字幕| 亚洲精华国产| 欧美亚洲另类制服自拍| 亚洲老司机网| 欧美日韩一区二区三区在线| 中文字幕色av一区二区三区| 国产精品久久精品国产| 色欲久久久天天天综合网| 麻豆一区产品精品蜜桃的特点| 欧美在线欧美在线| 国产精品无码天天爽视频| 欧美亚洲另类在线观看| 日本中文字幕在线| 久久久久久久久久久久久久久久久久av| 欧美成人精品在线观看| 精品欧美一区二区三区在线观看| 日韩动漫一区| 久久精品国产亚洲blacked| 色先锋aa成人| 91精品国产一区二区三区香蕉| 国内精品久久久久久久久| 麻豆成全视频免费观看在线看| a'aaa级片在线观看| 欧美激情一区二区三区在线视频观看| 超级黄的软件| 天干夜夜爽爽日日日日| 成人黄色图片网站| 日本a在线天堂| 欧美日韩一区二区三区在线播放| 三级福利片在线观看| 精品女同一区二区三区在线观看| 91在线精品一区二区| 韩国成人动漫| 丝袜足脚交91精品| 亚洲黄色录像| 亚洲性图第一页| 婷婷五月综合久久中文字幕| 亚洲国产成人久久综合| 中文字幕视频二区| 国产一区二区三区免费在线观看| h片视频在线观看| 欧美资源一区| 日韩在线黄色| 91精品一区二区三区蜜桃| 久久91亚洲精品中文字幕奶水| 欧美一级日韩不卡播放免费| 91午夜交换视频| 天天操天天射天天色| 性色一区二区三区| 性色av无码久久一区二区三区| 日本一区二区久久精品| 日韩中文综合网| 国产在线激情| 日本爱爱小视频| 国产一区免费电影| 紧缚捆绑精品一区二区| 成人一级片网址| 亚洲无玛一区| 亚洲乱亚洲高清| 污视频网站免费看| 日韩中文字幕av| 日日狠狠久久偷偷四色综合免费| 国产aⅴ综合色| 国产又粗又猛视频免费| 国内一区在线| 欧美性片在线观看| 国产一区二区三区四区五区加勒比| 亚洲狼人综合| 2024国产精品| 中文资源在线官网| 欧美国产日韩一区| 色视频免费在线观看| 日韩在线观看免费网站| 国产成人欧美日韩在线电影| 九九精品视频在线| 亚洲日本青草视频在线怡红院| 国模无码大尺度一区二区三区| 国产一国产二国产三| 日本男人操女人| 欧美日韩一区二区高清| 欧美人与性动交a欧美精品| 欧美女v视频| 五月婷婷亚洲综合| 99精品在免费线中文字幕网站一区| 青青青青久久精品国产一百度| 色婷婷狠狠18禁久久| 久久精品香蕉视频| 亚洲二区在线播放| 欧美成人激情视频免费观看| 熟妇人妻无乱码中文字幕真矢织江| 国产又白又嫩又爽又黄| 99国产一区| 丰满的护士2在线观看高清| 中文一区二区三区四区| 精品视频久久久久久| 欧美日韩一级视频| 亚洲精品国精品久久99热| 成人av免费在线| 性综艺节目av在线播放| 欧美亚日韩国产aⅴ精品中极品| 国产盗摄一区二区三区| 日本天堂一区| 在线观看污污视频| 黄色网址在线播放| 成年人免费看毛片| 国产精品1luya在线播放| 色爱综合网欧美| 亚洲精品国产片| 成人动漫视频在线| 好吊色视频988gao在线观看| jizzjizz中文| 日韩精品久久一区二区三区| 欧美三级日本三级| 在线观看不卡| 久久精品国产亚洲AV熟女| 亚洲av综合一区| 国产精品xxx电影| 国产精品815.cc红桃| 亚洲免费观看高清完整版在线观看熊| 夜夜骑日日射| 日本不卡高清视频| 九义人在线观看完整免费版电视剧| 国内成+人亚洲| 欧美性xxxxx极品视频| 黄色精品免费| av加勒比在线| 91九色国产社区在线观看| 欧美精品粉嫩高潮一区二区| 青青草免费观看免费视频在线| 黄色91视频| 国产成人av电影在线播放| 天堂网在线免费观看| 精品一区二区三区视频在线播放| 超碰在线公开免费| 国产精品永久免费观看| 青青青草视频在线| sdde在线播放一区二区| 羞羞的视频在线观看| 波多野结衣视频在线观看| 欧美亚洲国产精品久久| 久久久123| 国产一卡2卡3卡免费网站| 欧美激情视频在线播放| 丝袜亚洲另类丝袜在线| 影音先锋黄色资源| 日韩三级视频在线看| 亚洲综合色婷婷| 国产精品美女久久久久aⅴ| 国产乱码久久久| 国产二级一片内射视频播放| 中文字幕不卡在线播放| 欧美黄色免费| 26uuu国产在线精品一区二区| 免费人成在线观看网站| www毛片com| 三区在线视频| 亚洲精品狠狠操| 欧美freesex黑人又粗又大| 国产精品涩涩涩视频网站| 国产精品麻豆成人av电影艾秋| 国产又粗又黄又爽的视频| 国产麻豆综合视频在线观看| 中文字幕三区| 午夜精品福利一区二区三区av|