日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

首頁 > 數據庫 > Oracle > 正文

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

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

發現了如下文章,來自IT168,標題為《Spring應用數據主鍵的生成策略盤點》,摘錄如下:


    在一般情況下,在新增領域對象后,都需要獲取對應的主鍵值。使用應用層來維護主鍵,在一定程度上有利于程序性能的優化和應用移植性的提高。在采用數據庫自增主鍵的方案里,如果JDBC驅動不能綁定新增記錄對應的主鍵,就需要手工執行查詢語句以獲取對應的主鍵值,對于高并發的系統,這很容易返回錯誤的主鍵。通過帶緩存的DataFieldMaxValueIncrementer,可以一次獲取批量的主鍵值,供多次插入領域對象時使用,它的執行性能是很高的。

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

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

    當autoGeneratedKeys參數設置為Statement.RETURN_GENERATED_KEYS值時即可綁定數據庫產生的主鍵值,設置為Statement.NO_GENERATED_KEYS時,不綁定主鍵值。下面的代碼演示了Statement綁定并獲取數據庫產生的主鍵值的過程:
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();②獲取對應的表自增主鍵值 }



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

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

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

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

 
public void addForum(final Forum forum) { final String sql = "INSERT INTO t_forum(forum_name,forum_desc) VALUES(?,?)"; KeyHolder keyHolder = new GeneratedKeyHolder();①創建一個主鍵執有者 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());②從主鍵執有者中獲取主鍵 }

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

 

數據庫
獲取新增主鍵的查詢語句
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')
   
    如果數據庫的并發率很高,比如在插入記錄后執行查詢主鍵之前,數據庫又執行了若干條插入記錄的SQL語句,這時,通過表 1 返回的主鍵值就是最后一條插入語句的主鍵值,而非我們希望的主鍵值了。所以使用查詢語句獲取表自增鍵值是不安全的,這也是為什么有些數據庫(如 Oracle、Firebird)故意不提供自增鍵,而只提供序列的原因,序列強制要求你在新增記錄前,先獲取主鍵值。Oracle通過SELECT <SEQUENCE_NAME>.nextval FROM DUAL獲取序列的下一個值,而FireBird通過SELECT GEN_ID(<SEQUENCE_NAME> 1) FROM RDB$DATABASE獲取序列的下一個值。在10.4.1小節中,我們還將講解應用層自增鍵的相關知識。


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

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

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

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

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

    我們通過DateFieldValueIncrementer從數據庫中獲取主鍵值來彌補這個缺陷。首先,調整PostJdbcDao的代碼,添加DateFieldValueIncrementer屬性,并通過它從序列中得到下一個主鍵值:
    代碼清單 13 使用DateFieldValueIncrementer產生主鍵
 
public class PostJdbcDao extends JdbcDaoSupport implements PostDao { private DataFieldMaxValueIncrementer incre; ①主鍵值產生器 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()獲取下一個主鍵值。


以序列方式產生主鍵值
    在Oracle數據庫中創建一個seq_post_id序列,使用這個序列為t_post提供主鍵值,以下是創建seq_post_id的腳本: 
 
create sequence seq_post_id increment by 1start with 1;


   接著,調整Spring的配置,使用OracleSequenceMaxValueIncrementer作為主鍵產生器:

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

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

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

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

 
<bean id="incre"class="org.springframework.jdbc.support.incrementer.MySQLMaxValueIncrementer"><property name="incrementerName" value="t_post_id"/> ①設置維護主鍵的表名 <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決定一次返回的主鍵個數,這里我們設置為10。當第一次通過 MySQLMaxValueIncrementer# nextIntValue()獲取主鍵值時,MySQLMaxValueIncrementer將使t_post_id. sequence_id遞增10,而后續9次調用nextIntValue()方法時,都從緩存中獲取主鍵值。直到第10次再次調用 nextIntValue()方法時,才會再次將t_post_id. sequence_id字段值遞增10,如此循環反復。

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


另外補充一點在SqlUpdate執行update之前需設置setReturnGeneratedKeys(true);
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
日韩欧美国产午夜精品| 日韩福利视频导航| 日韩国产在线观看一区| 欧美日韩精品在线视频| wwwav91com| 精品国产31久久久久久| 欧美 日韩 国产 在线观看| 91蜜桃婷婷狠狠久久综合9色| 国产欧美日产一区| 欧美国产一级| 国产视频2区| av一卡二卡| 亚洲热在线观看| 日本黄色一区二区三区| 亚洲a级在线播放观看| 欧美日韩国产在线看| 中文字幕日韩视频| 亚洲电影中文字幕在线观看| 国产午夜精品久久| 日韩精品中文在线观看| 精品国产不卡一区二区| 国产丝袜一区二区| 一区二区三区中文字幕在线观看| 九九视频精品免费| 日韩欧美在线视频日韩欧美在线视频| 精品在线网站观看| 一区二区不卡视频| 亚洲国产www| 欧美日韩不卡在线视频| 中文在线日韩| 国产免费久久| 国产v日产∨综合v精品视频| 91精品在线观看视频| 中文字幕一区二区三区精品| 国产黄色精品| 99在线精品视频免费观看20| xxxcom在线观看| 日韩国产在线观看一区| 亚洲精品欧美二区三区中文字幕| 精品999视频| 中文在线а√在线8| 日韩三级免费观看| 欧美日韩国产三级| 亚洲第一视频| 91久久久精品| 日韩精品午夜| 日本精品国语自产拍在线观看| 国产一区高清视频| 国产黄色精品| 国产资源在线观看| 欧美日韩国产在线看| 精品久久九九| 中文 欧美 日韩| 欧美日韩亚洲系列| 91亚洲欧美| 成人无遮挡免费网站视频在线观看| 精品1区2区3区| 亚洲小说春色综合另类网蜜桃| 欧美日韩精品在线| 亚洲国产欧美日韩精品| 国产一区免费视频| 欧美日韩国产999| 日韩中文字幕在线视频观看| 91精品国产色综合久久久蜜香臀| 深夜福利亚洲| 日韩精品福利一区二区三区| 国产永久免费高清在线观看| 大香一本蕉伊线亚洲网| 国产激情99| 日韩字幕在线观看| 日韩欧美国产亚洲| 日本一级一片免费视频| 国产手机精品视频| 欧美一级二级三级区| 99精品视频国产| 欧美日韩精品国产| 欧美日韩国产一级片| 欧美日韩国产一中文字不卡| 欧美日韩成人一区二区| 日韩三级在线播放| 日韩一级中文字幕| 在线视频三区| 日韩欧美国产一二三区| 国产裸体歌舞团一区二区| 蜜桃视频中文字幕| 国产中文伊人| 精品日韩在线| 国产高清不卡av| 日本不卡视频一区| 91精品国产91久久久久久青草| 不卡在线视频| 国产 欧美在线| 日韩中文在线视频| 国产高清大尺度一区二区不卡| 国产黄在线观看免费观看不卡| 日本免费在线视频不卡一不卡二| 欧美日韩国产在线播放| √天堂资源中文www| 欧美日韩中文字幕| 九九精品调教| 国产啊啊啊视频在线观看| 国产嫩草影院久久久久| 一区二区视频在线观看免费的| 精品国产免费视频| 国产在线黄色| 日韩一级免费在线观看| 激情综合色综合久久| 韩日中文字幕第一页| 999精品视频在线观看播放| 日韩精品在线看| 欧美日韩高清| 中文在线а√在线8| 99视频在线看| 午夜一区二区三区免费| 亚洲一区精品在线| 日韩精品视频在线免费观看| 91亚洲国产| 午夜国产视频| 国产高清一级片| 91精品啪在线观看国产60岁| 日韩在线视频一区二区三区| aaa大片在线观看| 亚洲一区在线观看免费| 亚洲欧美中文字幕在线一区| 国产一级一片免费播放| 亚洲黄色在线观看| 中文字幕高清在线播放| 欧美 中文字幕| 亚洲大片免费看| 97久久精品| 尤物av一区二区| 亚洲羞羞网站| 不卡专区在线| 久久精品日韩欧美| 精品日韩99亚洲| 高清不卡一区二区| 国产一区在线观看视频| 欧美精品一区二区三区在线播放| 国产三级做爰在线观看| 国产福利三区| 日韩精品一页| 久久精品国产成人一区二区三区| 高清1区2区| 三级网站免费观看| 欧美成人精品在线| 精品国自产在线观看| 在线国产99| 国产欧美日韩精品综合| 国产激情三区| 91久久视频| 亚洲第一中文字幕| 亚洲一区在线观看免费| 在线观看91精品国产入口| 国产在线导航| 国产在线日韩精品| 亚洲一区日韩精品中文字幕| 人人做人人澡人人爽欧美| 日韩不卡av| 日韩激情一区| 91精品视频在线| aaa大片在线观看| 中文精品电影| 精品不卡一区二区| 日韩精品在线观| 亚洲第一中文字幕| 欧美黄页在线免费观看| 欧美一卡2卡三卡4卡5免费| 91精品网站| 日韩视频一区| 亚洲综合日韩欧美| 欧美日韩中文字幕| 黄色国产在线| 久久91精品国产91久久小草| 影音先锋中文字幕在线观看| 日韩国产一区三区| 91亚洲国产高清| 中文字幕在线视频久| 日韩在线小视频| 91精品电影| 国产 日韩 欧美 综合| 欧美日韩一级视频| 日韩视频在线一区| 欧美亚洲视频在线看网址| 亚洲男女av一区二区| 亚洲综合在线小说| 国产拍揄自揄精品视频麻豆| 中文字幕在线观看播放| 精品国产不卡一区二区| 欧美日韩在线播放三区四区| 国产日韩中文字幕在线| 色综合天天综合网国产成人综合天| 人成免费在线视频| 中文字幕 欧美日韩| 日韩亚洲欧美中文高清在线| 日韩精品第一区| 99久热re在线精彩视频| 粉嫩粉嫩芽的虎白女18在线视频| 日韩欧美中文在线视频| 亚洲福利精品视频| 久久久精品网| 欧美日韩亚洲国产综合| 中文字幕不卡三区| 欧美日韩成人一区| 日韩在线中文字幕| 欧美日韩在线观看一区| 在线观看免费国产小视频| 中文字幕无线码一区| 精品国自产在线观看| 日韩精品手机在线| 亚洲一卡二卡在线观看| 在线资源av| 久久视频在线免费观看| 免费看ww视频网站入口| 国产高清一级片| 精品视频123区在线观看| 精品久久久91| 欧美一级手机免费观看片| 日韩不卡在线播放| 国产xxx在线| 精品在线网站观看| 欧美99久久| av免费看在线| 亚洲福利一区二区三区| 二区中文字幕| 一区二区三区高清在线| 国产一级视频| 刘玥91精选国产在线观看| 国产欧美三级| 亚洲狠狠婷婷综合久久久久图片| 日韩欧美中文| 国产黄色在线免费观看| 在线免费视频一区二区| 亚洲小说春色综合另类网蜜桃| 亚洲女人天堂色在线7777| 91精品免费在线观看| 国产婷婷在线观看| 欧美,日韩,国产在线| 亚洲第一视频在线观看| 国产婷婷色一区二区三区| 一区二区三区中文字幕在线观看| 欧美91精品| 国产中文伊人| 又黄又www的网站| 国产一区 二区 三区一级| 中文字幕久久精品| 久久精品国产视频| av一区在线| 日本一欧美一欧美一亚洲视频| 中文字幕在线视频网| 亚洲专区一区| 国产乱国产乱老熟300| 中文字幕一区二区三区精品| 欧美一级一级性生活免费录像| 在线日韩精品视频| 日韩精品福利一区二区三区| 日本不卡一区在线| 国产精品一区二三区| 国产99在线 | 亚洲| 日韩www在线| 中文字幕在线精品| 国产欧美日韩亚州综合| 97久久精品午夜一区二区| 精品日韩视频在线观看| 日韩av一区在线| 久久精品日韩欧美| 欧美精品一区二区三区在线播放| 中文字幕亚洲一区在线观看| 日韩欧美在线网址| 中文字幕国产日韩| 亚洲免费精品视频| 国产成人精品亚洲| 日韩欧美中文免费| 精品久久久久久无| 一区二区三区在线不卡| 日本视频久久久| 日本啊v在线| 欧美不卡一二三| 欧美日韩精品久久久| a级在线免费观看| 欧美 日韩 国产在线观看| wwwww亚洲| 日韩国产欧美在线视频| 中文字幕欧美亚洲| 欧美日韩国产123区| 免费视频久久| 欧美三级免费观看| 久久精品日韩无码| 91精品国产自产在线丝袜啪| 国产最新在线| 日本精品免费观看高清观看| 欧美日韩国产一二三| 国产在成人精品线拍偷自揄拍| 国产99在线 | 亚洲| 亚洲大片免费看| 欧美一级久久久久久久久大| 日韩av一区二| 久久久久久久久综合| 日韩中文字幕视频网| 中文网丁香综合网| 中文字幕在线官网| 国产欧美日韩中文字幕| 午夜亚洲一区| 国产在线欧美| 日韩av综合在线观看| 欧美久久久网站| 中文字幕在线播放一区| 国产一区不卡精品| 一区二区三区精品99久久| 国产香蕉免费精品视频| 欧美熟妇乱码在线一区| 久久激情一区| 国产无套粉嫩白浆在线2022年 | 欧美三级日韩在线| 日韩视频一区二区在线观看| 99精品999| 在线不卡日本| 日韩在线视频免费观看| 亚洲一区中文字幕在线观看| 国产乱国产乱300精品| 欧美日韩精品高清| 欧美日韩三级一区| 久久精品99久久久久久久久| 欧美婷婷久久| 日本不卡免费高清视频| 91精品久久久久久蜜臀| 在线视频国内一区二区| 国产亚洲人成a一在线v站| 精品福利二区三区| 日韩专区中文字幕| 国产日韩av高清| 国产日产一区二区三区 | www.中文字幕在线| 日韩欧美国产高清91| 99精品视频国产| 国产小视频免费在线网址| 国产日韩第一页v| 欧美日韩在线视频免费观看| 亚洲中文字幕在线一区| 一区二区三区在线播放欧美| 91精品在线免费观看| 欧美国产日韩在线播放| 日韩在线不卡一区| 日韩欧美在线第一页| www..com日韩| 黄色片免费在线| 久久精品电影| 欧美日韩色综合| 国产福利免费在线观看| 欧美日韩一二| 日韩免费精品视频| 欧美亚洲天堂| 日韩高清在线一区二区| 蜜桃久久av一区| 欧美亚洲免费高清在线观看| av最新网址| 成人a在线视频免费观看| 日韩精品在线免费观看视频| 日韩一级在线免费观看| 国产高清一区| 日韩中文字幕视频网| 日韩在线观看精品| 国产不卡一区| 欧美日韩在线视频免费观看| 久久久99免费| 不卡在线一区二区| lutube成人福利在线观看| 91精品婷婷国产综合久久竹菊| 中文字幕亚洲高清| 日韩.欧美.亚洲| 免费国产成人看片在线| 国产欧美日韩综合精品| 精品久久久精品| 日韩欧美中文在线| 一区二区视频国产| 91精品啪在线观看国产60岁 | 国产欧美日韩精品在线观看| 精品成a人在线观看| 影音先锋中文字幕在线观看| 久久蜜桃精品| 91精品国产调教在线观看| 久久精品www| 欧美人妻一区二区三区| 九色蝌蚪视频在线| 国产视频中文字幕在线观看| 91精品在线视频观看| 91久久在线| 精品对白一区国产伦| 日韩.欧美.亚洲| 国产成人精品亚洲| 日韩欧美中文第一页| 国产不卡一区二区在线观看| 欧美日韩国产一区| 色综合婷婷久久| www中文字幕| 蜜桃久久久久| 91精品国产自产| 国产亚洲欧美色| 欧美日韩精品三区| 国产三级免费观看| 国产不卡一区|