auth="Container"type="javax.sql.DataSource"
maxActive="10000"maxIdle="30"maxWait="10000"
username="root"password="123456"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:
mysql:
//localhost:
3306/schooling?
autoReconnect=true"
/>
--Defaultsetofmonitoredresources-->
WEB-INF/web.xml
DBConnection
jdbc/teaching
javax.sql.DataSource
Container
packagedweap.teaching.dao;
publicinterfaceIDAO{
}
packagedweap.teaching.dao;
importjava.sql.Connection;
importjavax.naming.Context;
importjavax.naming.InitialContext;
importjavax.sql.DataSource;
publicclassMysqlDaoimplementsIDAO{
privatestaticConnectionconn=null;
publicstaticvoidopenConnection(){
try{
if(conn==null){
//引入Web资源
ContextinitCtx=newInitialContext();
//通过资源建立数据空间
DataSourceds=(DataSource)initCtx.lookup("java:
comp/env/jdbc/teaching");
//获得数据库连接
conn=ds.getConnection();
}
}catch(Exceptione){
e.printStackTrace();
}
}
publicsynchronizedstaticConnectiongetConnection(){
Connectiontemp=null;
if(conn!
=null){
temp=conn;
conn=null;
System.out.println("==>"+temp);
returntemp;
}else{
returnnull;
}
}
publicsynchronizedstaticvoidreleaseConnection(Connectioncon){
conn=con;
}
publicstaticvoidcloseConn(){
try{
conn.close();
}catch(Exceptione){
e.printStackTrace();
}
}
}
四、数据库连接池
packagedweap.teaching.dao;
publicinterfaceIDAO{
}
packagedweap.teaching.dao;
importjava.sql.Connection;
importjavax.naming.Context;
importjavax.naming.InitialContext;
importjavax.sql.DataSource;
publicclassMysqlDaoimplementsIDAO{
privatestaticConnectionconn=null;
publicstaticvoidopenConnection(){
try{
if(conn==null){
//引入Web资源
ContextinitCtx=newInitialContext();
//通过资源建立数据空间
DataSourceds=(DataSource)initCtx.lookup("java:
comp/env/jdbc/teaching");
//获得数据库连接
conn=ds.getConnection();
}
}catch(Exceptione){
e.printStackTrace();
}
}
publicsynchronizedstaticConnectiongetConnection(){
Connectiontemp=null;
if(conn!
=null){
temp=conn;
conn=null;
System.out.println("==>"+temp);
returntemp;
}else{
returnnull;
}
}
publicsynchronizedstaticvoidreleaseConnection(Connectioncon){
conn=con;
}
publicstaticvoidcloseConn(){
try{
conn.close();
}catch(Exceptione){
e.printStackTrace();
}
}
}
packagedweap.teaching.dao;
importjava.sql.Connection;
importjava.sql.SQLException;
importcom.mchange.v2.c3p0.ComboPooledDataSource;
publicclassMysqlCp30DaoimplementsIDAO{
privatestaticComboPooledDataSourcecpds=null;
publicstaticvoidopenConnection(){
try{
if(cpds==null){
cpds=newComboPooledDataSource();
cpds.setDriverClass("com.mysql.jdbc.Driver");
cpds.setJdbcUrl("jdbc:
mysql:
//localhost:
3306/teaching?
autoReconnect=true");
cpds.setUser("root");
cpds.setPassword("123456");
//
--JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。
但由于预缓存的statements
//属于单个connection而不是整个连接池。
所以设置这个参数需要考虑到多方面的因素。
//如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。
Default:
0-->
cpds.setMaxStatements(10000);
//连接池中保留的最大连接数。
Default:
15maxPoolSize
cpds.setMaxPoolSize(1000);
//当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。
Default:
3acquireIncrement
cpds.setAcquireIncrement(5);
//每60秒检查所有连接池中的空闲连接。
Default:
0idleConnectionTestPeriod
cpds.setIdleConnectionTestPeriod(120);
cpds.setCheckoutTimeout(1800);
//连接池中保留的最小连接数。
cpds.setMinPoolSize(5);
//初始化时获取三个连接,取值应在minPoolSize与maxPoolSize之间。
Default:
3initialPoolSize
cpds.setInitialPoolSize(20);
//因性能消耗大请只在需要的时候使用它。
如果设为true那么在每个connection提交的
//时候都将校验其有效性。
建议使用idleConnectionTestPeriod或automaticTestTable
//等方法来提升连接测试的性能。
Default:
falsetestConnectionOnCheckout
cpds.setTestConnectionOnCheckout(true);//每次连接验证连接是否可用
//最大空闲时间,25000秒内未使用则连接被丢弃。
若为0则永不丢弃。
Default:
0maxIdleTime
cpds.setMaxIdleTime(25000);
//连接关闭时默认将所有未提交的操作回滚。
Default:
falseautoCommitOnClose
cpds.setAutoCommitOnClose(true);
//如果设为true那么在取得连接的同时将校验连接的有效性。
Default:
falsetestConnectionOnCheckin
cpds.setTestConnectionOnCheckin(true);
//定义所有连接测试都执行的测试语句。
在使用连接测试的情况下这个一显著提高测试速度。
注意:
//测试的表必须在初始数据源的时候就存在。
Default:
nullpreferredTestQuery
cpds.setTestConnectionOnCheckout(true);
//定义在从数据库获取新连接失败后重复尝试的次数。
Default:
30acquireRetryAttempts
cpds.setAcquireRetryAttempts(30);
//两次连接中间隔时间,单位毫秒。
Default:
1000acquireRetryDelay
cpds.setAcquireRetryDelay(1000);
//获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常。
但是数据源仍有效
//保留,并在下次调用getConnection()的时候继续尝试获取连接。
如果设为true,那么在尝试
//获取连接失败后该数据源将申明已断开并永久关闭。
Default:
falsebreakAfterAcquireFailure
cpds.setBreakAfterAcquireFailure(true);
//
--当连接池用完时客户端调用getConnection()后等待获取新连接的时间,超时后将抛出
//SQLException,如设为0则无限期等待。
单位毫秒。
Default:
0-->
//100
//
--c3p0将建一张名为Test的空表,并使用其自带的查询语句进行测试。
如果定义了这个参数那么
//属性preferredTestQuery将被忽略。
你不能在这张Test表上进行任何操作,它将只供c3p0测试
//使用。
Default:
null-->
//Test
//100
//
--maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数。
Default:
0-->
//
//
--c3p0是异步操作的,缓慢的JDBC操作通过帮助进程完成。
扩展这些操作可以有效的提升性能
//通过多线程实现多个操作同时被执行。
Default:
3-->
//3
//
--用户修改系统配置参数执行前最多等待300秒。
Default:
300-->
//300
}
}catch(Exceptione){
e.printStackTrace();
}
}
publicsynchronizedstaticConnectiongetConnection(){
Connectiontemp=null;
try{
temp=cpds.getConnection();
}catch(SQLExceptione){
e.printStackTrace();
}
returntemp;
}
publicsynchronizedstaticvoidreleaseConnection(Connectioncon){
try{
con.close();
con=null;
}catch(SQLExceptione){
e.printStackTrace();
}
}
}
五、准备实体类
packagedweap.teaching.entity;
publicabstractclassPersistence{
}
packagedweap.teaching.entity;
importjava.io.Serializable;
publicabstractclassAbstractCodeextendsPersistenceimplementsSerializable{
privatestaticfinallongserialVersionUID=-3502662370553592044L;
privateStringid;
privateStringupid;
privateStringname;
privateStringtype;
publicStringgetId(){
returnid;
}
publicvoidsetId(Stringid){
this.id=id;
}
publicStringgetUpid(){
returnupid;
}
publicvoidsetUpid(Stringupid){
this.upid=upid;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicStringgetType(){
returntype;
}
publicvoidsetType(Stringtype){
this.type=type;
}
}
packagedweap.teaching.entity;
importjava.io.Serializable;
publicclassChapterextendsAbstractCodeimplementsSerializable{
privatestaticfinallongserialVersionUID=504166490665454688L;
}
packagedweap.teaching.entity;
importjava.io.Serializable;
publicclassDepartmentextendsAbstractCodeimplementsSerializable{
privatestaticfinallongserialVersionUID=-5473969294737077368L;
}
packagedweap.teaching.entity;
importjava.io.Serializable;
publicclassGradeextendsAbstractCodeimplementsSerializable{
privatestaticfinallongserialVersionUID=-3727884586881059176L;
}
packagedweap.teaching.entity;
importjava.io.Serializable;
publicclassLevelextendsAbstractCodeimplementsSerializable{
privatestaticfinallongserialVersionUID=-3540154005236298430L;
}
packagedweap.teaching.entity;
importjava.io.Serializable;
publicclassMajorextendsAbstractCodeimplementsSerializable{
privatestaticfinallongserialVersionUID=-1518894239837674421L;
}
packagedweap.teaching.entity;
importjava.io.Serializable;
publicclassSchoolextendsAbstractCodeimplementsSerializable{
privatestaticfinallongserialVersionUID=225534230139110992L;
}
packagedweap.teaching.entity;
importjava.io.Serializable;
publicclassSchoolclassextendsAbstractCodeimplementsSerializable{
privatestaticfinallongserialVersionUID=-171771897403418281L;
}
packagedweap.teaching.entity;
importjava.io.Serializable;
publicclassSexextendsAbstractCodeimplementsSerializable{
privatestaticfinallongserialVersionUID=2251595822298120338L;
}
packagedweap.teaching.entity;
importjava.io.Serializable;
publicclassSourceextendsAbstractCodeimplementsSerializable{
privatestaticfinallongserialVersionUID=-6872125758753735659L;
}
packagedweap.teaching.entity;
importjava.io.Serializable;
publicclassTermextendsAbstractCodeimplementsSerializable{
privatestaticfinallongserialVersionUID=-3384586706756055908L;
}
六、Dd