官方参考文档:/
c3p0xml文件配置文档:
c3p0是一个易于使用的库,通过使用jdbc3规范定义的功能和jdbc2的可选扩展来增强传统JDBC驱动程序的“企业级”。从版本0.9.5开始,c3p0完全支持jdbc4规范。
<div id="article_content" class="article_content clearfix csdn-tracking-statistics" data-pid="blog" data-mod="popu_307" data-dsm="post"><link rel="stylesheet" href=".css"><div class="htmledit_views" deep="5"><p>【引用请注明出处<a href="" target="_blank">;/a>】</p>
<p>基本的用法在<a href="" target="_blank">;/a>,以及<a href="" target="_blank">;/a>中。</p>
<p>一个示例的配置文件如下:</p>
<p>【引用请注明出处<a href="" target="_blank">;/a>】<br data-filtered="filtered"></p>
<p></p>
<div class="dp-highlighter bg_html"><div class="bar"><div class="tools"><b>[html]</b> <a href="#" class="ViewSource" title="view plain" οnclick="dp.sh.Toolbar.Command('ViewSource',this);return false;">view plain</a><span data-mod="popu_168"> <a href="#" class="CopyToClipboard" title="copy" οnclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;">copy</a><div style="position: absolute; left: 224px; top: 768px; width: 16px; height: 16px; z-index: 99;"><embed id="ZeroClipboardMovie_1" src=".swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_1" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="" flashvars="id=1&width=16&height=16" wmode="transparent"></div><div style="position: absolute; left: 224px; top: 768px; width: 16px; height: 16px; z-index: 99;"><embed id="ZeroClipboardMovie_3" src=".swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_3" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="" flashvars="id=3&width=16&height=16" wmode="transparent"></div></span><span data-mod="popu_169"> <a href="#" class="PrintSource" title="print" οnclick="dp.sh.Toolbar.Command('PrintSource',this);return false;">print</a></span><a href="#" class="About" title="?" οnclick="dp.sh.Toolbar.Command('About',this);return false;">?</a></div></div><ol start="1" class="dp-xml"><li class="alt"><span><span class="tag"><?</span><span class="tag-name">xml</span><span> </span><span class="attribute">version</span><span>=</span><span class="attribute-value">"1.0"</span><span> </span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">"UTF-8"</span><span class="tag">?></span><span> </span></span></li><li class=""><span> </span></li><li class="alt"><span><span class="tag"><</span><span class="tag-name">c3p0-config</span><span class="tag">></span><span> </span></span></li><li class=""><span> <span class="tag"><</span><span class="tag-name">default-config</span><span class="tag">></span><span> </span></span></li><li class="alt"><span> <span class="tag"><</span><span class="tag-name">property</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">"automaticTestTable"</span><span class="tag">></span><span>t_c3p0_test</span><span class="tag"></</span><span class="tag-name">property</span><span class="tag">></span><span> </span></span></li><li class=""><span> <span class="tag"><</span><span class="tag-name">property</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">"checkoutTimeout"</span><span class="tag">></span><span>10000</span><span class="tag"></</span><span class="tag-name">property</span><span class="tag">></span><span> </span></span></li><li class="alt"><span> <span class="tag"><</span><span class="tag-name">property</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">"idleConnectionTestPeriod"</span><span class="tag">></span><span>10</span><span class="tag"></</span><span class="tag-name">property</span><span class="tag">></span><span> </span></span></li><li class=""><span> <span class="tag"><</span><span class="tag-name">property</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">"initialPoolSize"</span><span class="tag">></span><span>5</span><span class="tag"></</span><span class="tag-name">property</span><span class="tag">></span><span> </span></span></li><li class="alt"><span> <span class="tag"><</span><span class="tag-name">property</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">"maxIdleTime"</span><span class="tag">></span><span>600</span><span class="tag"></</span><span class="tag-name">property</span><span class="tag">></span><span> </span></span></li><li class=""><span> <span class="tag"><</span><span class="tag-name">property</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">"maxPoolSize"</span><span class="tag">></span><span>20</span><span class="tag"></</span><span class="tag-name">property</span><span class="tag">></span><span> </span></span></li><li class="alt"><span> <span class="tag"><</span><span class="tag-name">property</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">"minPoolSize"</span><span class="tag">></span><span>2</span><span class="tag"></</span><span class="tag-name">property</span><span class="tag">></span><span> </span></span></li><li class=""><span> <span class="tag"><</span><span class="tag-name">property</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">"maxStatements"</span><span class="tag">></span><span>60</span><span class="tag"></</span><span class="tag-name">property</span><span class="tag">></span><span> </span></span></li><li class="alt"><span> <span class="tag"><</span><span class="tag-name">property</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">"maxStatementsPerConnection"</span><span class="tag">></span><span>3</span><span class="tag"></</span><span class="tag-name">property</span><span class="tag">></span><span> </span></span></li><li class=""><span> </span></li><li class="alt"><span> <span class="tag"><</span><span class="tag-name">user-overrides</span><span> </span><span class="attribute">user</span><span>=</span><span class="attribute-value">"test-user"</span><span class="tag">></span><span> </span></span></li><li class=""><span> <span class="tag"><</span><span class="tag-name">property</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">"maxPoolSize"</span><span class="tag">></span><span>10</span><span class="tag"></</span><span class="tag-name">property</span><span class="tag">></span><span> </span></span></li><li class="alt"><span> <span class="tag"><</span><span class="tag-name">property</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">"minPoolSize"</span><span class="tag">></span><span>1</span><span class="tag"></</span><span class="tag-name">property</span><span class="tag">></span><span> </span></span></li><li class=""><span> <span class="tag"><</span><span class="tag-name">property</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">"maxStatements"</span><span class="tag">></span><span>0</span><span class="tag"></</span><span class="tag-name">property</span><span class="tag">></span><span> </span></span></li><li class="alt"><span> <span class="tag"></</span><span class="tag-name">user-overrides</span><span class="tag">></span><span> </span></span></li><li class=""><span> </span></li><li class="alt"><span> <span class="tag"></</span><span class="tag-name">default-config</span><span class="tag">></span><span> </span></span></li><li class=""><span> </span></li><li class="alt"><span> <span class="tag"><</span><span class="tag-name">named-config</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">"metkb"</span><span class="tag">></span><span> </span></span></li><li class=""><span> <span class="tag"><</span><span class="tag-name">property</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">"acquireIncrement"</span><span class="tag">></span><span>20</span><span class="tag"></</span><span class="tag-name">property</span><span class="tag">></span><span> </span></span></li><li class="alt"><span> <span class="tag"><</span><span class="tag-name">property</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">"initialPoolSize"</span><span class="tag">></span><span>10</span><span class="tag"></</span><span class="tag-name">property</span><span class="tag">></span><span> </span></span></li><li class=""><span> <span class="tag"><</span><span class="tag-name">property</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">"minPoolSize"</span><span class="tag">></span><span>10</span><span class="tag"></</span><span class="tag-name">property</span><span class="tag">></span><span> </span></span></li><li class="alt"><span> <span class="tag"><</span><span class="tag-name">property</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">"maxPoolSize"</span><span class="tag">></span><span>100</span><span class="tag"></</span><span class="tag-name">property</span><span class="tag">></span><span> </span></span></li><li class=""><span> </span></li><li class="alt"><span> <span class="tag"><</span><span class="tag-name">property</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">"maxStatements"</span><span class="tag">></span><span>0</span><span class="tag"></</span><span class="tag-name">property</span><span class="tag">></span><span> </span></span></li><li class=""><span> <span class="tag"><</span><span class="tag-name">property</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">"maxStatementsPerConnection"</span><span class="tag">></span><span>10</span><span class="tag"></</span><span class="tag-name">property</span><span class="tag">></span><span> </span></span></li><li class="alt"><span> </span></li><li class=""><span> <span class="comments"><!-- he's important, but there's only one of him --></span><span> </span></span></li><li class="alt"><span> <span class="tag"><</span><span class="tag-name">user-overrides</span><span> </span><span class="attribute">user</span><span>=</span><span class="attribute-value">"master-of-the-universe"</span><span class="tag">></span><span> </span></span></li><li class=""><span> <span class="tag"><</span><span class="tag-name">property</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">"acquireIncrement"</span><span class="tag">></span><span>1</span><span class="tag"></</span><span class="tag-name">property</span><span class="tag">></span><span> </span></span></li><li class="alt"><span> <span class="tag"><</span><span class="tag-name">property</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">"initialPoolSize"</span><span class="tag">></span><span>1</span><span class="tag"></</span><span class="tag-name">property</span><span class="tag">></span><span> </span></span></li><li class=""><span> <span class="tag"><</span><span class="tag-name">property</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">"minPoolSize"</span><span class="tag">></span><span>1</span><span class="tag"></</span><span class="tag-name">property</span><span class="tag">></span><span> </span></span></li><li class="alt"><span> <span class="tag"><</span><span class="tag-name">property</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">"maxPoolSize"</span><span class="tag">></span><span>5</span><span class="tag"></</span><span class="tag-name">property</span><span class="tag">></span><span> </span></span></li><li class=""><span> <span class="tag"><</span><span class="tag-name">property</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">"maxStatementsPerConnection"</span><span class="tag">></span><span>50</span><span class="tag"></</span><span class="tag-name">property</span><span class="tag">></span><span> </span></span></li><li class="alt"><span> <span class="tag"></</span><span class="tag-name">user-overrides</span><span class="tag">></span><span> </span></span></li><li class=""><span> <span class="tag"></</span><span class="tag-name">named-config</span><span class="tag">></span><span> </span></span></li><li class="alt"><span><span class="tag"></</span><span class="tag-name">c3p0-config</span><span class="tag">></span><span> </span></span></li></ol></div><pre class="html" name="code" style="display: none;"><?xml version="1.0" encoding="UTF-8"?><c3p0-config><default-config><property name="automaticTestTable">t_c3p0_test</property><property name="checkoutTimeout">10000</property><property name="idleConnectionTestPeriod">10</property><property name="initialPoolSize">5</property><property name="maxIdleTime">600</property><property name="maxPoolSize">20</property><property name="minPoolSize">2</property><property name="maxStatements">60</property><property name="maxStatementsPerConnection">3</property><user-overrides user="test-user"><property name="maxPoolSize">10</property><property name="minPoolSize">1</property><property name="maxStatements">0</property></user-overrides></default-config><named-config name="metkb"><property name="acquireIncrement">20</property><property name="initialPoolSize">10</property><property name="minPoolSize">10</property><property name="maxPoolSize">100</property><property name="maxStatements">0</property><property name="maxStatementsPerConnection">10</property><!-- he's important, but there's only one of him --><user-overrides user="master-of-the-universe"><property name="acquireIncrement">1</property><property name="initialPoolSize">1</property><property name="minPoolSize">1</property><property name="maxPoolSize">5</property><property name="maxStatementsPerConnection">50</property></user-overrides></named-config>
</c3p0-config></pre>放在eclipse Web工程的src目录下即可(eclipse会将该目录下的配置文件复制到tomcat的webapps/XXX/WEB-INF/classes下)
<p></p>
<p>一个C3P0的单例的示例代码如下(连接池的单例并不妨碍并发,因为从连接池中取连接并不费时,而且取出的连接是线程安全的):</p>
<p>【引用请注明出处<a href="" target="_blank">;/a>】<br data-filtered="filtered"></p>
<p></p>
<div class="dp-highlighter bg_java"><div class="bar"><div class="tools"><b>[java]</b> <a href="#" class="ViewSource" title="view plain" οnclick="dp.sh.Toolbar.Command('ViewSource',this);return false;">view plain</a><span data-mod="popu_168"> <a href="#" class="CopyToClipboard" title="copy" οnclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;">copy</a><div style="position: absolute; left: 224px; top: 1705px; width: 16px; height: 16px; z-index: 99;"><embed id="ZeroClipboardMovie_2" src=".swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_2" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="" flashvars="id=2&width=16&height=16" wmode="transparent"></div><div style="position: absolute; left: 224px; top: 1705px; width: 16px; height: 16px; z-index: 99;"><embed id="ZeroClipboardMovie_4" src=".swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_4" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="" flashvars="id=4&width=16&height=16" wmode="transparent"></div></span><span data-mod="popu_169"> <a href="#" class="PrintSource" title="print" οnclick="dp.sh.Toolbar.Command('PrintSource',this);return false;">print</a></span><a href="#" class="About" title="?" οnclick="dp.sh.Toolbar.Command('About',this);return false;">?</a></div></div><ol start="1" class="dp-j"><li class="alt"><span><span class="keyword">package</span><span> cn.kb.util; </span></span></li><li class=""><span> </span></li><li class="alt"><span><span class="keyword">import</span><span> java.beans.PropertyVetoException; </span></span></li><li class=""><span><span class="keyword">import</span><span> java.sql.Connection; </span></span></li><li class="alt"><span><span class="keyword">import</span><span> java.sql.ResultSet; </span></span></li><li class=""><span><span class="keyword">import</span><span> java.sql.SQLException; </span></span></li><li class="alt"><span><span class="keyword">import</span><span> java.sql.Statement; </span></span></li><li class=""><span> </span></li><li class="alt"><span><span class="keyword">import</span><span> hange.v2.c3p0.ComboPooledDataSource; </span></span></li><li class=""><span> </span></li><li class="alt"><span><span class="keyword">public</span><span> </span><span class="keyword">class</span><span> PooledDBA </span><span class="keyword">implements</span><span> DBA </span></span></li><li class=""><span>{ </span></li><li class="alt"><span> <span class="keyword">private</span><span> ComboPooledDataSource cpds = </span><span class="keyword">null</span><span>; </span></span></li><li class=""><span> <span class="keyword">private</span><span> </span><span class="keyword">static</span><span> Log dblog = </span><span class="keyword">null</span><span>; </span></span></li><li class="alt"><span> <span class="keyword">private</span><span> </span><span class="keyword">static</span><span> String DBClassName = </span><span class="keyword">null</span><span>; </span></span></li><li class=""><span> <span class="keyword">private</span><span> </span><span class="keyword">static</span><span> String DBName = </span><span class="keyword">null</span><span>; </span></span></li><li class="alt"><span> <span class="keyword">private</span><span> </span><span class="keyword">static</span><span> String DBUrl = </span><span class="keyword">null</span><span>; </span></span></li><li class=""><span> <span class="keyword">private</span><span> </span><span class="keyword">static</span><span> String DBUser = </span><span class="keyword">null</span><span>; </span></span></li><li class="alt"><span> <span class="keyword">private</span><span> </span><span class="keyword">static</span><span> String DBPassword = </span><span class="keyword">null</span><span>; </span></span></li><li class=""><span> </span></li><li class="alt"><span> <span class="keyword">protected</span><span> PooledDBA() </span></span></li><li class=""><span> { </span></li><li class="alt"><span> cpds = <span class="keyword">new</span><span> ComboPooledDataSource(</span><span class="string">"metkb"</span><span>); </span></span></li><li class=""><span> <span class="keyword">try</span><span> </span></span></li><li class="alt"><span> { </span></li><li class=""><span> cpds.setDriverClass( DBClassName ); </span></li><li class="alt"><span> } </span></li><li class=""><span> <span class="keyword">catch</span><span> (PropertyVetoException e) </span></span></li><li class="alt"><span> { </span></li><li class=""><span> ption(e); </span></li><li class="alt"><span> } </span></li><li class=""><span> cpds.setJdbcUrl( DBUrl + DBName); </span></li><li class="alt"><span> cpds.setUser(DBUser); </span></li><li class=""><span> cpds.setPassword(DBPassword); </span></li><li class="alt"><span> } </span></li><li class=""><span> </span></li><li class="alt"><span> <span class="keyword">static</span><span> </span></span></li><li class=""><span> { </span></li><li class="alt"><span> <span class="keyword">try</span><span> </span></span></li><li class=""><span> { </span></li><li class="alt"><span> DBClassName = Instance().get(<span class="string">"db.classname"</span><span>); </span></span></li><li class=""><span> DBName = Instance().get(<span class="string">"db.name"</span><span>); </span></span></li><li class="alt"><span> DBUrl = Instance().get(<span class="string">"db.url"</span><span>); </span></span></li><li class=""><span> DBUser = Instance().get(<span class="string">"db.user"</span><span>); </span></span></li><li class="alt"><span> DBPassword = Instance().get(<span class="string">"db.password"</span><span>); </span></span></li><li class=""><span> dblog = Instance().getLog(<span class="string">"db"</span><span>); </span></span></li><li class="alt"><span> } </span></li><li class=""><span> <span class="keyword">catch</span><span> (Exception e) </span></span></li><li class="alt"><span> { </span></li><li class=""><span> e.printStackTrace(); </span></li><li class="alt"><span> } </span></li><li class=""><span> } </span></li><li class="alt"><span> </span></li><li class=""><span> <span class="annotation">@Override</span><span> </span></span></li><li class="alt"><span> <span class="keyword">public</span><span> </span><span class="keyword">synchronized</span><span> Connection getConnection() </span><span class="keyword">throws</span><span> SQLException, ClassNotFoundException, InterruptedException </span></span></li><li class=""><span> { </span></li><li class="alt"><span> <span class="keyword">return</span><span> Connection(); </span></span></li><li class=""><span> } </span></li><li class="alt"><span> </span></li><li class=""><span> <span class="annotation">@Override</span><span> </span></span></li><li class="alt"><span> <span class="keyword">public</span><span> </span><span class="keyword">synchronized</span><span> </span><span class="keyword">void</span><span> close(Connection conn) </span></span></li><li class=""><span> { </span></li><li class="alt"><span> <span class="keyword">try</span><span> </span></span></li><li class=""><span> { </span></li><li class="alt"><span> <span class="keyword">if</span><span> (conn != </span><span class="keyword">null</span><span>) </span></span></li><li class=""><span> { </span></li><li class="alt"><span> conn.close(); </span></li><li class=""><span> conn = <span class="keyword">null</span><span>; </span></span></li><li class="alt"><span> } </span></li><li class=""><span> } </span></li><li class="alt"><span> <span class="keyword">catch</span><span> (SQLException e) </span></span></li><li class=""><span> { </span></li><li class="alt"><span> ption(e); </span></li><li class=""><span> } </span></li><li class="alt"><span> } </span></li><li class=""><span> </span></li><li class="alt"><span> <span class="annotation">@Override</span><span> </span></span></li><li class=""><span> <span class="keyword">public</span><span> </span><span class="keyword">synchronized</span><span> </span><span class="keyword">void</span><span> close(Statement stat) </span></span></li><li class="alt"><span> { </span></li><li class=""><span> <span class="keyword">try</span><span> </span></span></li><li class="alt"><span> { </span></li><li class=""><span> <span class="keyword">if</span><span> (stat != </span><span class="keyword">null</span><span>) </span></span></li><li class="alt"><span> { </span></li><li class=""><span> stat.close(); </span></li><li class="alt"><span> stat = <span class="keyword">null</span><span>; </span></span></li><li class=""><span> } </span></li><li class="alt"><span> } </span></li><li class=""><span> <span class="keyword">catch</span><span> (SQLException e) </span></span></li><li class="alt"><span> { </span></li><li class=""><span> ption(e); </span></li><li class="alt"><span> } </span></li><li class=""><span> } </span></li><li class="alt"><span> </span></li><li class=""><span> <span class="annotation">@Override</span><span> </span></span></li><li class="alt"><span> <span class="keyword">public</span><span> </span><span class="keyword">synchronized</span><span> </span><span class="keyword">void</span><span> close(ResultSet rest) </span></span></li><li class=""><span> { </span></li><li class="alt"><span> <span class="keyword">try</span><span> </span></span></li><li class=""><span> { </span></li><li class="alt"><span> <span class="keyword">if</span><span> (rest != </span><span class="keyword">null</span><span>) </span></span></li><li class=""><span> { </span></li><li class="alt"><span> rest.close(); </span></li><li class=""><span> rest = <span class="keyword">null</span><span>; </span></span></li><li class="alt"><span> } </span></li><li class=""><span> } </span></li><li class="alt"><span> <span class="keyword">catch</span><span> (SQLException e) </span></span></li><li class=""><span> { </span></li><li class="alt"><span> ption(e); </span></li><li class=""><span> } </span></li><li class="alt"><span> } </span></li><li class=""><span>} </span></li></ol></div><pre class="java" name="code" style="display: none;">package cn.kb.util;import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;hange.v2.c3p0.ComboPooledDataSource;public class PooledDBA implements DBA
{private ComboPooledDataSource cpds = null;private static Log dblog = null;private static String DBClassName = null;private static String DBName = null;private static String DBUrl = null;private static String DBUser = null;private static String DBPassword = null;protected PooledDBA(){cpds = new ComboPooledDataSource("metkb");try{cpds.setDriverClass( DBClassName );}catch (PropertyVetoException e){ption(e);} cpds.setJdbcUrl( DBUrl + DBName);cpds.setUser(DBUser); cpds.setPassword(DBPassword);}static{try{DBClassName = Instance().get("db.classname");DBName = Instance().get("db.name");DBUrl = Instance().get("db.url");DBUser = Instance().get("db.user");DBPassword = Instance().get("db.password");dblog = Instance().getLog("db");}catch (Exception e){e.printStackTrace();}}@Overridepublic synchronized Connection getConnection() throws SQLException, ClassNotFoundException, InterruptedException{Connection();}@Overridepublic synchronized void close(Connection conn){try{if (conn != null){conn.close();conn = null;}}catch (SQLException e){ption(e);}}@Overridepublic synchronized void close(Statement stat){try{if (stat != null){stat.close();stat = null;}}catch (SQLException e){ption(e);}}@Overridepublic synchronized void close(ResultSet rest){try{if (rest != null){rest.close();rest = null;}}catch (SQLException e){ption(e);}}
}
</pre><br data-filtered="filtered"><br data-filtered="filtered">
【引用请注明出处<a href="" target="_blank">;/a>】<br data-filtered="filtered"><p></p></div></div>
本文发布于:2024-01-27 22:46:29,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/17063667913104.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |