亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

java 數(shù)據(jù)庫連接池的實現(xiàn)代碼

系統(tǒng) 2240 0

java 數(shù)據(jù)庫連接池 實現(xiàn)代碼

復(fù)制代碼
  1. package ?com.xiaobian; ??
  2. ??
  3. /** ?
  4. ?*? 數(shù)據(jù)庫連接池 管理類 ?
  5. ?*/ ??
  6. import ?java.io.*; ??
  7. import ?java.sql.*; ??
  8. import ?java.util.*; ??
  9. import ?java.util.Date; ??
  10. ??
  11. /** ?
  12. ?*?管理類DBConnectionManager支持對一個或多個由屬性文件定義的 數(shù)據(jù)庫連接池 ?
  13. ?*?訪問.客戶程序可以調(diào)用getInstance()方法訪問本類的唯一實例 ?
  14. ?*/ ??
  15. public ? class ?DBConnectionManager?{ ??
  16. ???? ??
  17. ???? public ? static ? void ?main(String[]?args)?{ ??
  18. ????????DBConnectionManager?connectionManager?=?DBConnectionManager.getInstance(); ??
  19. ???????? ??
  20. ????????Connection?conn?=??connectionManager.getConnection( "idb" ); ??
  21. ???????????? try ?{ ??
  22. ????????????????Thread.sleep( 10 ); ??
  23. ????????????}? catch ?(InterruptedException?e)?{ ??
  24. ???????????????? //?TODO?Auto-generated?catch?block ??
  25. ????????????????e.printStackTrace(); ??
  26. ????????????} ??
  27. ????????Connection?conn1?=??connectionManager.getConnection( "idb" ); ??
  28. ????????Connection?conn2?=??connectionManager.getConnection( "idb" ); ??
  29. ????????Connection?conn3?=??connectionManager.getConnection( "idb" ); ??
  30. ????????Connection?conn4?=??connectionManager.getConnection( "idb" ); ??
  31. ????????Connection?conn5?=??connectionManager.getConnection( "idb" ); ??
  32. ????????connectionManager.freeConnection( "idb" ,?conn); ??
  33. ????????connectionManager.freeConnection( "idb" ,?conn1); ??
  34. ????????connectionManager.freeConnection( "idb" ,?conn2); ??
  35. ????????connectionManager.freeConnection( "idb" ,?conn3); ??
  36. ????????connectionManager.freeConnection( "idb" ,?conn4); ??
  37. ????????connectionManager.freeConnection( "idb" ,?conn5); ??
  38. ????????Connection?conn6?=?connectionManager.getConnection( "idb" ); ??
  39. ????????Connection?conn7?=?connectionManager.getConnection( "idb" ); ??
  40. ????????System.out.println( "?conn6?==?" +conn6?+ "?conn7?==?" +conn7); ??
  41. ???????? ??
  42. ????} ??
  43. ??
  44. ???? ??
  45. ???? static ? private ?DBConnectionManager?instance;? //?唯一實例 ??
  46. ??
  47. ???? static ? private ? int ?clients;? // ??
  48. ??
  49. ???? private ?Vector?drivers?=? new ?Vector(); ??
  50. ??
  51. ???? private ?PrintWriter?log; ??
  52. ??
  53. ???? private ?Hashtable?pools?=? new ?Hashtable(); ??
  54. ??
  55. ???? /** ?
  56. ?????*?返回唯一實例.如果是第一次調(diào)用此方法,則創(chuàng)建實例 ?
  57. ?????*? ?
  58. ?????*?@return?DBConnectionManager?唯一實例 ?
  59. ?????*/ ??
  60. ???? static ? synchronized ? public ?DBConnectionManager?getInstance()?{ ??
  61. ???????? if ?(instance?==? null )?{ ??
  62. ????????????instance?=? new ?DBConnectionManager(); ??
  63. ????????} ??
  64. ????????clients++; ??
  65. ???????? return ?instance; ??
  66. ????} ??
  67. ??
  68. ???? /** ?
  69. ?????*?建構(gòu)私有函數(shù)以防止其它對象創(chuàng)建本類實例 ?
  70. ?????*/ ??
  71. ???? private ?DBConnectionManager()?{ ??
  72. ????????init(); ??
  73. ????} ??
  74. ??
  75. ???? /** ?
  76. ?????*?將連接對象返回給由名字指定的連接池 ?
  77. ?????*? ?
  78. ?????*?@param?name ?
  79. ?????*????????????在屬性文件中定義的連接池名字 ?
  80. ?????*?@param?con ?
  81. ?????*????????????連接對象 ?
  82. ?????*/ ??
  83. ???? public ? void ?freeConnection(String?name,?Connection?con)?{ ??
  84. ????????DBConnectionPool?pool?=?(DBConnectionPool)?pools.get(name); ??
  85. ???????? if ?(pool?!=? null )?{ ??
  86. ????????????pool.freeConnection(con); ??
  87. ????????} ??
  88. ????} ??
  89. ??
  90. ???? /** ?
  91. ?????*?獲得一個可用的(空閑的)連接.如果沒有可用連接,且已有連接數(shù)小于最大連接數(shù)?限制,則創(chuàng)建并返回新連接 ?
  92. ?????*? ?
  93. ?????*?@param?name ?
  94. ?????*????????????在屬性文件中定義的連接池名字 ?
  95. ?????*?@return?Connection?可用連接或null ?
  96. ?????*/ ??
  97. ???? public ?Connection?getConnection(String?name)?{ ??
  98. ????????DBConnectionPool?pool?=?(DBConnectionPool)?pools.get(name); ??
  99. ???????? //System.out.println("?pool?==?"+pool); ??
  100. ???????? if ?(pool?!=? null )?{ ??
  101. ???????????? return ?pool.getConnection(); ??
  102. ????????} ??
  103. ???????? return ? null ; ??
  104. ????} ??
  105. ??
  106. ???? /** ?
  107. ?????*?獲得一個可用連接.若沒有可用連接,且已有連接數(shù)小于最大連接數(shù)限制,?則創(chuàng)建并返回新連接.否則,在指定的時間內(nèi)等待其它線程釋放連接. ?
  108. ?????*? ?
  109. ?????*?@param?name ?
  110. ?????*????????????連接池名字 ?
  111. ?????*?@param?time ?
  112. ?????*????????????以毫秒計的等待時間 ?
  113. ?????*?@return?Connection?可用連接或null ?
  114. ?????*/ ??
  115. ???? public ?Connection?getConnection(String?name,? long ?time)?{ ??
  116. ????????DBConnectionPool?pool?=?(DBConnectionPool)?pools.get(name); ??
  117. ???????? if ?(pool?!=? null )?{ ??
  118. ???????????? return ?pool.getConnection(time); ??
  119. ????????} ??
  120. ???????? return ? null ; ??
  121. ????} ??
  122. ??
  123. ???? /** ?
  124. ?????*?關(guān)閉所有連接,撤銷驅(qū)動程序的注冊 ?
  125. ?????*/ ??
  126. ???? public ? synchronized ? void ?release()?{ ??
  127. ???????? //?等待直到最后一個客戶程序調(diào)用 ??
  128. ???????? if ?(--clients?!=? 0 )?{ ??
  129. ???????????? return ; ??
  130. ????????} ??
  131. ????????Enumeration?allPools?=?pools.elements(); ??
  132. ???????? while ?(allPools.hasMoreElements())?{ ??
  133. ????????????DBConnectionPool?pool?=?(DBConnectionPool)?allPools.nextElement(); ??
  134. ????????????pool.release(); ??
  135. ????????} ??
  136. ????????Enumeration?allDrivers?=?drivers.elements(); ??
  137. ???????? while ?(allDrivers.hasMoreElements())?{ ??
  138. ????????????Driver?driver?=?(Driver)?allDrivers.nextElement(); ??
  139. ???????????? try ?{ ??
  140. ????????????????DriverManager.deregisterDriver(driver); ??
  141. ????????????????log( "撤銷JDBC驅(qū)動程序?" ?+?driver.getClass().getName()?+? "的注冊" ); ??
  142. ????????????}? catch ?(SQLException?e)?{ ??
  143. ????????????????log(e,? "無法撤銷下列JDBC驅(qū)動程序的注冊:?" ?+?driver.getClass().getName()); ??
  144. ????????????} ??
  145. ????????} ??
  146. ????} ??
  147. ??
  148. ???? /** ?
  149. ?????*?根據(jù)指定屬性創(chuàng)建連接池實例. ?
  150. ?????*? ?
  151. ?????*?@param?props ?
  152. ?????*????????????連接池屬性 ?
  153. ?????*/ ??
  154. ???? private ? void ?createPools(Properties?props)?{ ??
  155. ????????Enumeration?propNames?=?props.propertyNames(); ??
  156. ???????? while ?(propNames.hasMoreElements())?{ ??
  157. ????????????String?name?=?(String)?propNames.nextElement(); ??
  158. ???????????? if ?(name.endsWith( ".url" ))?{ ??
  159. ????????????????String?poolName?=?name.substring( 0 ,?name.lastIndexOf( "." )); ??
  160. ???????????????? //System.out.println("?poolName?||"+poolName+"|"); ??
  161. ????????????????String?url?=?props.getProperty(poolName?+? ".url" ); ??
  162. ???????????????? if ?(url?==? null )?{ ??
  163. ????????????????????log( "沒有為連接池" ?+?poolName?+? "指定URL" ); ??
  164. ???????????????????? continue ; ??
  165. ????????????????} ??
  166. ????????????????String?user?=?props.getProperty(poolName?+? ".user" ); ??
  167. ????????????????String?password?=?props.getProperty(poolName?+? ".password" ); ??
  168. ????????????????String?maxconn?=?props.getProperty(poolName?+? ".maxconn" ,? "0" ); ??
  169. ???????????????? int ?max; ??
  170. ???????????????? try ?{ ??
  171. ????????????????????max?=?Integer.valueOf(maxconn).intValue(); ??
  172. ????????????????}? catch ?(NumberFormatException?e)?{ ??
  173. ????????????????????log( "錯誤的最大連接數(shù)限制:?" ?+?maxconn?+? "?.連接池:?" ?+?poolName); ??
  174. ????????????????????max?=? 0 ; ??
  175. ????????????????} ??
  176. ????????????????DBConnectionPool?pool?=? new ?DBConnectionPool(poolName,?url, ??
  177. ????????????????????????user,?password,?max); ??
  178. ????????????????pools.put(poolName,?pool); ??
  179. ????????????????log( "成功創(chuàng)建連接池" ?+?poolName); ??
  180. ????????????} ??
  181. ????????} ??
  182. ????} ??
  183. ??
  184. ???? //?-------------------------------------------------------------------------------- ??
  185. ??
  186. ???? /** ?
  187. ?????*?讀取屬性完成初始化 ?
  188. ?????*/ ??
  189. ???? private ? void ?init()?{ ??
  190. ???????? ??
  191. ????????InputStream?fileinputstream?=? null ; ??
  192. ???????? try ?{ ??
  193. ????????????fileinputstream?=? new ?FileInputStream( "./src/db.properties" ); ??
  194. ????????}? catch ?(FileNotFoundException?e1)?{ ??
  195. ????????????e1.printStackTrace(); ??
  196. ????????} ??
  197. ???????? //BufferedReader?bufferedreader?=?new?BufferedReader(new?InputStreamReader(fileinputstream)); ??
  198. ??
  199. ???????? //InputStream?is?=?getClass().getResourceAsStream("D:/workspace/UmessageSms/src/db.properties"); ??
  200. ????????Properties?dbProps?=? new ?Properties(); ??
  201. ???????? try ?{ ??
  202. ????????????dbProps.load(fileinputstream); ??
  203. ????????}? catch ?(Exception?e)?{ ??
  204. ????????????e.printStackTrace(); ??
  205. ????????????System.err.println( "不能讀取屬性文件.?" ??
  206. ????????????????????+? "請確保db.properties在CLASSPATH指定的路徑中" ); ??
  207. ???????????? return ; ??
  208. ????????} ??
  209. ????????String?logFile?=?dbProps.getProperty( "logfile" , ??
  210. ???????????????? "DBConnectionManager.log" ); ??
  211. ???????? ??
  212. ???????? //System.out.println(dbProps.getProperty("logfile")); ??
  213. ???????? try ?{ ??
  214. ????????????log?=? new ?PrintWriter( new ?FileWriter(logFile,? true ),? true ); ??
  215. ????????}? catch ?(IOException?e)?{ ??
  216. ????????????System.err.println( "無法打開日志文件:?" ?+?logFile); ??
  217. ????????????log?=? new ?PrintWriter(System.err); ??
  218. ????????} ??
  219. ????????loadDrivers(dbProps); ??
  220. ????????createPools(dbProps); ??
  221. ????} ??
  222. ??
  223. ???? /** ?
  224. ?????*?裝載和注冊所有JDBC驅(qū)動程序 ?
  225. ?????*? ?
  226. ?????*?@param?props ?
  227. ?????*????????????屬性 ?
  228. ?????*/ ??
  229. ???? private ? void ?loadDrivers(Properties?props)?{ ??
  230. ????????String?driverClasses?=?props.getProperty( "drivers" ); ??
  231. ????????StringTokenizer?st?=? new ?StringTokenizer(driverClasses); ??
  232. ???????? while ?(st.hasMoreElements())?{ ??
  233. ????????????String?driverClassName?=?st.nextToken().trim(); ??
  234. ???????????? try ?{ ??
  235. ????????????????Driver?driver?=?(Driver)?Class.forName(driverClassName) ??
  236. ????????????????????????.newInstance(); ??
  237. ????????????????DriverManager.registerDriver(driver); ??
  238. ????????????????drivers.addElement(driver); ??
  239. ????????????????log( "成功注冊JDBC驅(qū)動程序" ?+?driverClassName); ??
  240. ????????????}? catch ?(Exception?e)?{ ??
  241. ????????????????log( "無法注冊JDBC驅(qū)動程序:?" ?+?driverClassName?+? ",?錯誤:?" ?+?e); ??
  242. ????????????} ??
  243. ????????} ??
  244. ????} ??
  245. ??
  246. ???? /** ?
  247. ?????*?將文本信息寫入日志文件 ?
  248. ?????*/ ??
  249. ???? private ? void ?log(String?msg)?{ ??
  250. ????????log.println( new ?Date()?+? ":?" ?+?msg); ??
  251. ????} ??
  252. ??
  253. ???? /** ?
  254. ?????*?將文本信息與異常寫入日志文件 ?
  255. ?????*/ ??
  256. ???? private ? void ?log(Throwable?e,?String?msg)?{ ??
  257. ????????log.println( new ?Date()?+? ":?" ?+?msg); ??
  258. ????????e.printStackTrace(log); ??
  259. ????} ??
  260. ??
  261. ???? /**?*************************************************************?*/ ??
  262. ???? /**?********************內(nèi)部類DBConnectionPool********************?*/ ??
  263. ???? /**?*************************************************************?*/ ??
  264. ???? /** ?
  265. ?????*?此內(nèi)部類定義了一個連接池.它能夠根據(jù)要求創(chuàng)建新連接,直到預(yù)定的最?大連接數(shù)為止.在返回連接給客戶程序之前,它能夠驗證連接的有效性. ?
  266. ?????*/ ??
  267. ???? class ?DBConnectionPool?{ ??
  268. ???????? private ? int ?checkedOut;? //?當前連接數(shù) ??
  269. ??
  270. ???????? private ?Vector?freeConnections?=? new ?Vector();? //?保存所有可用連接 ??
  271. ??
  272. ???????? private ? int ?maxConn;? //?此連接池允許建立的最大連接數(shù) ??
  273. ??
  274. ???????? private ?String?name;? //?連接池名字 ??
  275. ??
  276. ???????? private ?String?password;? //?密碼或null ??
  277. ??
  278. ???????? private ?String?URL;? //?數(shù)據(jù)庫的JDBC?URL ??
  279. ??
  280. ???????? private ?String?user;? //?數(shù)據(jù)庫賬號或null ??
  281. ??
  282. ???????? /** ?
  283. ?????????*?創(chuàng)建新的連接池 ?
  284. ?????????*? ?
  285. ?????????*?@param?name ?
  286. ?????????*????????????連接池名字 ?
  287. ?????????*?@param?URL ?
  288. ?????????*????????????數(shù)據(jù)庫的JDBC?URL ?
  289. ?????????*?@param?user ?
  290. ?????????*????????????數(shù)據(jù)庫帳號或?null ?
  291. ?????????*?@param?password ?
  292. ?????????*????????????密碼或?null ?
  293. ?????????*?@param?maxConn ?
  294. ?????????*????????????此連接池允許建立的最大連接數(shù) ?
  295. ?????????*/ ??
  296. ???????? public ?DBConnectionPool(String?name,?String?URL,?String?user, ??
  297. ????????????????String?password,? int ?maxConn)?{ ??
  298. ???????????? this .name?=?name; ??
  299. ???????????? this .URL?=?URL; ??
  300. ???????????? this .user?=?user; ??
  301. ???????????? this .password?=?password; ??
  302. ???????????? this .maxConn?=?maxConn; ??
  303. ????????} ??
  304. ??
  305. ???????? /** ?
  306. ?????????*?將不再使用的連接返回給連接池 ?
  307. ?????????*? ?
  308. ?????????*?@param?con ?
  309. ?????????*????????????客戶程序釋放的連接 ?
  310. ?????????*/ ??
  311. ???????? public ? synchronized ? void ?freeConnection(Connection?con)?{ ??
  312. ???????????? //?將指定連接加入到向量末尾 ??
  313. ????????????freeConnections.addElement(con); ??
  314. ????????????checkedOut--; ??
  315. ????????????notifyAll();? //?刪除等待隊列中的所有線程 ??
  316. ????????} ??
  317. ??
  318. ???????? /** ?
  319. ?????????*?從連接池獲得一個可用連接.如果沒有空閑的連接且當前連接數(shù)小于最大連接 ?
  320. ?????????*?數(shù)限制,則創(chuàng)建新連接.如原來登記為可用的連接不再有效,則從向量刪除之,?然后遞歸調(diào)用自己以嘗試新的可用連接. ?
  321. ?????????*/ ??
  322. ???????? public ? synchronized ?Connection?getConnection()?{ ??
  323. ????????????Connection?con?=? null ; ??
  324. ???????????? //System.out.println("?freeConnections.size()?"+freeConnections.size()); ??
  325. ???????????? if ?(freeConnections.size()?>? 0 )?{ ??
  326. ???????????????? //?獲取向量中第一個可用連接 ??
  327. ????????????????con?=?(Connection)?freeConnections.firstElement(); ??
  328. ????????????????freeConnections.removeElementAt( 0 ); ??
  329. ???????????????? try ?{ ??
  330. ???????????????????? if ?(con.isClosed())?{ ??
  331. ????????????????????????log( "從連接池" ?+?name?+? "刪除一個無效連接" ); ??
  332. ???????????????????????? //?遞歸調(diào)用自己,嘗試再次獲取可用連接 ??
  333. ????????????????????????con?=?getConnection(); ??
  334. ????????????????????} ??
  335. ????????????????}? catch ?(SQLException?e)?{ ??
  336. ????????????????????log( "從連接池" ?+?name?+? "刪除一個無效連接" ); ??
  337. ???????????????????? //?遞歸調(diào)用自己,嘗試再次獲取可用連接 ??
  338. ????????????????????con?=?getConnection(); ??
  339. ????????????????} ??
  340. ????????????}? else ? if ?(maxConn?==? 0 ?||?checkedOut?<?maxConn)?{ ??
  341. ????????????????con?=?newConnection(); ??
  342. ????????????} ??
  343. ???????????? if ?(con?!=? null )?{ ??
  344. ????????????????checkedOut++; ??
  345. ????????????} ??
  346. ????????????System.out.println( "con?==?" +con); ??
  347. ???????????? return ?con; ??
  348. ????????} ??
  349. ??
  350. ???????? /** ?
  351. ?????????*?從連接池獲取可用連接.可以指定客戶程序能夠等待的最長時間?參見前一個getConnection()方法. ?
  352. ?????????*? ?
  353. ?????????*?@param?timeout ?
  354. ?????????*????????????以毫秒計的等待時間限制 ?
  355. ?????????*/ ??
  356. ???????? public ? synchronized ?Connection?getConnection( long ?timeout)?{ ??
  357. ???????????? long ?startTime?=? new ?Date().getTime(); ??
  358. ????????????Connection?con; ??
  359. ???????????? while ?((con?=?getConnection())?==? null )?{ ??
  360. ???????????????? try ?{ ??
  361. ????????????????????wait(timeout); ??
  362. ????????????????}? catch ?(InterruptedException?e)?{ ??
  363. ????????????????} ??
  364. ???????????????? if ?(( new ?Date().getTime()?-?startTime)?>=?timeout)?{ ??
  365. ???????????????????? //?wait()返回的原因是超時 ??
  366. ???????????????????? return ? null ; ??
  367. ????????????????} ??
  368. ????????????} ??
  369. ???????????? return ?con; ??
  370. ????????} ??
  371. ??
  372. ???????? /** ?
  373. ?????????*?關(guān)閉所有連接 ?
  374. ?????????*/ ??
  375. ???????? public ? synchronized ? void ?release()?{ ??
  376. ????????????Enumeration?allConnections?=?freeConnections.elements(); ??
  377. ???????????? while ?(allConnections.hasMoreElements())?{ ??
  378. ????????????????Connection?con?=?(Connection)?allConnections.nextElement(); ??
  379. ???????????????? try ?{ ??
  380. ????????????????????con.close(); ??
  381. ????????????????????log( "關(guān)閉連接池" ?+?name?+? "中的一個連接" ); ??
  382. ????????????????}? catch ?(SQLException?e)?{ ??
  383. ????????????????????log(e,? "無法關(guān)閉連接池" ?+?name?+? "中的連接" ); ??
  384. ????????????????} ??
  385. ????????????} ??
  386. ????????????freeConnections.removeAllElements(); ??
  387. ????????} ??
  388. ??
  389. ???????? /** ?
  390. ?????????*?創(chuàng)建新的連接 ?
  391. ?????????*/ ??
  392. ???????? private ?Connection?newConnection()?{ ??
  393. ????????????Connection?con?=? null ; ??
  394. ???????????? try ?{ ??
  395. ???????????????? if ?(user?==? null )?{ ??
  396. ????????????????????con?=?DriverManager.getConnection(URL); ??
  397. ????????????????}? else ?{ ??
  398. ????????????????????con?=?DriverManager.getConnection(URL,?user,?password); ??
  399. ????????????????} ??
  400. ????????????????log( "連接池" ?+?name?+? "創(chuàng)建一個新的連接" ); ??
  401. ????????????}? catch ?(SQLException?e)?{ ??
  402. ????????????????log(e,? "無法創(chuàng)建下列URL的連接:?" ?+?URL); ??
  403. ???????????????? return ? null ; ??
  404. ????????????} ??
  405. ???????????? return ?con; ??
  406. ????????} ??
  407. ????} ??
  408. }??

java 數(shù)據(jù)庫連接池的實現(xiàn)代碼


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: a在线观看免费视频 | 美国毛片免费观看 | 国产福利视频 | 久久久久久久久a免费 | 中文在线观看视频 | 久久精品国内偷自一区 | 老子午夜伦影理论片 | 国产精品一区二区国产 | 久久香蕉国产线看观看网站 | 亚洲最新在线 | 天天操天天玩 | 91福利在线免费观看 | 天天艹天天射 | 99国产成人高清在线视频 | 国产一区日韩二区欧美三 | 日日操干 | 亚洲精品国产不卡在线观看 | 伊人影院在线视频 | 久久这里只有精品免费播放 | 青青青国产手机免费视频 | 狠狠色狠狠色很很综合很久久 | 色资源站| 99久久国产亚洲综合精品 | 美女视频黄的免费视频网页 | 波多野结衣一二三区 | 免费中文字幕在线国语 | 国产视频二 | 成 人 黄 色 大 片全部 | 午夜精品久久久久久久2023 | 日韩一级视频免费观看 | 婷婷综合激情网 | 女人大毛片一级毛片一 | 精品国产免费福利片 | 国产高清视频免费 | 日韩欧美综合在线二区三区 | 色婷婷综合久久久中文字幕 | 国产精品久久在线 | 欧美日韩亚洲国产综合 | 四虎影午夜成年免费精品 | 久久在线免费视频 | 国产福利视频奶水在线 |