JDBC--接続プール


JDBC 1を介したDBCPおよびC3P0接続プール操作の使用JDBCを介したC3P0接続プールの使用C3P0
は、データソースとJNDIバインディングを実装し、JDBC3仕様とJDBC2標準拡張をサポートするオープンソースのJDBC接続プールです。現在それを使用しているオープンソースプロジェクトには、Hibernate、Springなどが含まれます。
例:
create table t_user(
user_id int primary key auto_increment、
user_name varchar(20)、
user_age int、
user_sex bit、
user_address varchar(30)、
user_day datetime
);

2.Javaプロジェクトを作成し
ます
。3

。依存関係パッケージc3p0-0.9.5.2.jarをインポートします。mchange -commons-java-0.2.15.jarmysql -connector-java-5.1.38.jar4。ser
[c3p0-の下にc3p0構成ファイルを作成します。 config.xml]

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
    <!-- c3p0的默认配置项 -->
	<default-config>
    	<property name="driverClass">com.mysql.jdbc.Driver</property>
    	<property name="jdbcUrl">jdbc:mysql://localhost:3306/test</property>
    	<property name="user">root</property>
    	<property name="password">123456</property>
    	<property name="initialPoolSize">5</property>
    	<property name="maxPoolSize">20</property>
  	</default-config>
  	<!-- 定义的数据库配置 -->
  	<named-config name="test"> 
    	<property name="driverClass">com.mysql.jdbc.Driver</property>
    	<property name="jdbcUrl">jdbc:mysql://localhost:3306/test</property>
    	<property name="user">root</property>
    	<property name="password">123456</property>
    	<property name="initialPoolSize">25</property>
    	<property name="maxPoolSize">200</property>
  	</named-config>
</c3p0-config>

5.javabeanを作成します

package com.lx.bean;
/**
 * 保存用户信息的java实体类
 * @author Administrator
 *
 */

import java.sql.Date;

public class UserBean {
	private int userid;
	private String username;
	private int userage;
	private boolean usersex;
	private String useraddress;
	private Date userday;

	public int getUserid() {
		return userid;
	}

	public void setUserid(int userid) {
		this.userid = userid;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public int getUserage() {
		return userage;
	}

	public void setUserage(int userage) {
		this.userage = userage;
	}

	public boolean isUsersex() {
		return usersex;
	}

	public void setUsersex(boolean usersex) {
		this.usersex = usersex;
	}

	public String getUseraddress() {
		return useraddress;
	}

	public void setUseraddress(String useraddress) {
		this.useraddress = useraddress;
	}

	public Date getUserday() {
		return userday;
	}

	public void setUserday(Date userday) {
		this.userday = userday;
	}
}

6.データベースアクセスクラスを作成します

package com.lx.dbacsess;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import com.lx.bean.UserBean;
public class UserAcsess {
	//定义保存c3p0数据源对象
   private ComboPooledDataSource dataSource=null;
   //定义数据库连接对象
   private  Connection  conn=null;
   //定义PreparedStatement 
   private PreparedStatement ps=null;
   public UserAcsess() {
	   //加载c3p0-config.xml文件中默认的config
	   //初始化数据源
	   //dataSource =new ComboPooledDataSource();
	   //初始化数据源,加载的是自定义的数据库表配置项
	   dataSource =new ComboPooledDataSource("test");
       //初始化数据源
	   try {
		conn=dataSource.getConnection();
	   } catch (SQLException e) {
		e.printStackTrace();
	   }
   }
  
   public  void  insertUser(UserBean  userbean) {
	   try {
	   String insertsql="insert into t_user values(null,?,?,?,?,?);";
	   ps=conn.prepareStatement(insertsql);
	   ps.setString(1,userbean.getUsername());
	   ps.setInt(2,userbean.getUserage());
       ps.setBoolean(3,userbean.isUsersex());
       ps.setString(4,userbean.getUseraddress());
       ps.setDate(5,new Date(System.currentTimeMillis()));
       int temp=ps.executeUpdate();
	   if(temp>0)  System.out.println("添加成功");
	   }catch(Exception e) {
		   e.printStackTrace();
	   }finally {
		   try {
			ps.close();
			conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	   }
	}
   
   public  void  updateUser(UserBean  userbean) {
	   try {
	   String insertsql="update t_user set user_name=?,"
	   		+ "user_age=?,user_sex=?,user_address=?,user_day=?"
	   		+ " where user_id=?";
	   ps=conn.prepareStatement(insertsql);
	   ps.setString(1,userbean.getUsername());
	   ps.setInt(2,userbean.getUserage());
       ps.setBoolean(3,userbean.isUsersex());
       ps.setString(4,userbean.getUseraddress());
       ps.setDate(5,new Date(System.currentTimeMillis()));
       ps.setInt(6,userbean.getUserid());
       int temp=ps.executeUpdate();
	   if(temp>0)  System.out.println("修改成功");
	   }catch(Exception e) {
		   e.printStackTrace();
	   }finally {
		   try {
			ps.close();
			conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	   }
	}
   
   public  void  deleteUser(int userid) {
	   try {
	   String insertsql="delete from t_user where user_id=?";
	   ps=conn.prepareStatement(insertsql);
       ps.setInt(1,userid);
       int temp=ps.executeUpdate();
	   if(temp>0)  System.out.println("删除成功");
	   }catch(Exception e) {
		   e.printStackTrace();
	   }finally {
		   try {
			ps.close();
			conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	   }
	}
   
   public  void  selectUser() {
	   try {
	   String selectsql="select* from t_user;";
	   ps=conn.prepareStatement(selectsql);
       ResultSet temp=ps.executeQuery();
	   while(temp.next()) {
		   int userid=temp.getInt("user_id");
		   String username=temp.getString("user_name");
		   int userage=temp.getInt("user_age");
		   boolean usersex=temp.getBoolean("user_sex");
		   String useraddress=temp.getString("user_address");
		   Date userday=temp.getDate("user_day");
	       System.out.println(userid+"\t"+username);
	   }
	   }catch(Exception e) {
		   e.printStackTrace();
	   }finally {
		   try {
			ps.close();
			conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	   }
	}
}

利点:c3p0のデータベース接続プールの構成が正常に構成および初期化されているため、データベース接続オブジェクトを作成する操作を手動で記述する必要がありません。
プログラムの実行効率を提供します。
将来データベースを切り替えるときにソースコードを変更する必要はありません。必要なのは、c3p0データベース接続プールの構成を変更することだけです。

2. JDBCを介してdbcp接続プールを使用します。
データベース接続プールはデータベース接続の割り当て、管理、および解放を担当します。これにより、アプリケーションは、既存のデータベース接続を再確立する代わりに再利用できます。アイドル時間が最大アイドルを超えるデータベース接続を解放します。時間データベース接続を解放しないことによって引き起こされるデータベース接続の欠落を回避するため。このテクノロジーは、データベース操作のパフォーマンスを大幅に向上させることができます。
例:

create table t_user(
user_id int primary key auto_increment,
user_name varchar(20),
user_age int,
user_sex bit,
user_address varchar(30),
user_day datetime
);

1.Javaプロジェクトを作成します。2。jar
パッケージ
[commons-dbcp-1.4.jarcommons
-dbutils-1.6.jarcommons
-pool-1.6.jar]をインポートし

ます。3。src [xxxxxxxx.properties]の下にデータベース接続構成ファイルを作成します。

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8
username=root
password=123456
maxActive=50
maxIdle=20
maxWait=60000

4.javabeanを作成します。5
。データベースアクセスクラスを作成します。

 public UserAscess() {
	   try {
	   Properties pro=new Properties();
	   InputStream inStream=this.getClass().getResourceAsStream("/jdbcdbcp.properties");
	   pro.load(inStream);
	   DataSource ds=BasicDataSourceFactory.createDataSource(pro);
	   conn=ds.getConnection();
	   }catch(Exception e) {
		   e.printStackTrace();
	   }
   }

3. DruidへのJDBCアクセス
Druidは、最初はデータベース接続プールです。Druidは、機能、パフォーマンス、スケーラビリティの点で現在最高のデータベース接続プールであり、DBCP、C3P0、BoneCP、Proxool、JBossDataSourceなどの他のデータベース接続プールを上回っています。DruidはAlibabaに600を超えるアプリケーションを展開し、1年以上にわたって大規模な本番環境で厳密にテストされています。Druidは、Alibabaによって開発されたMonitoringと呼ばれるデータベース接続プールです。
同時に、Druidはデータベース接続プールであるだけでなく、4つの部分で構成されています
。DruidはJDBCコンポーネントであり、3つの部分で構成さ
れています。Filter-Chainモデルに基づくプラグインシステムです。
DruidDataSource効率的で管理しやすいデータベース接続プール。
SQLParserの特長
ドルイドは
DBCPとC3P0を交換してください1.。Druidは、効率的で強力かつスケーラブルなデータベース接続プールを提供します。
2.データベースアクセスのパフォーマンスを監視できます。Druidには強力なStatFilterプラグインが組み込まれており、SQL実行パフォーマンスの詳細な統計を実行できます。これは、オンラインデータベースアクセスのパフォーマンス分析に役立ちます。
3.データベースのパスワードは暗号化されています。データベースパスワードを構成ファイルに直接書き込むことは悪い動作であり、セキュリティの問題を簡単に引き起こす可能性があります。DruidDruiverとDruidDataSourceの両方がPasswordCallbackをサポートしています。
4. SQL実行ログDruidは、Common-Logging、Log4j、およびJdkLogをサポートできるさまざまなLogFilterを提供します。必要に応じて、対応するLogFilterを選択して、アプリケーションのデータベースアクセスを監視できます。
5. JDBCを拡張します。JDBCレイヤーのプログラミング要件がある場合は、Druidが提供するフィルターメカニズムを使用して、JDBCレイヤーの拡張プラグインを簡単に作成できます。
したがって、Druidは次のことができます
。1。データベース接続プールとして機能します。
2.データベースアクセスのパフォーマンスを監視でき
ます。3。SQL実行ログを取得します。
例:

create table t_user(
user_id int primary key auto_increment,
user_name varchar(20),
user_age int,
user_sex bit,
user_address varchar(30),
user_day datetime
);


1.Javaプロジェクトを
作成します。2。jarパッケージ[druid-1.1.10.jar]をインポートします。3。srcの下にデータベース接続構成ファイル[xxxxxxxx.properties]を作成します。

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8
username=root
password=123456
initialSize=100
maxActive=300
maxWait=60000
Druid配置详解
https://blog.csdn.net/zhangjinwei417/article/details/92823438

4.javabeanを作成します。5
。データベースアクセスクラスを作成します。

  private Connection conn=null;
   private PreparedStatement ps=null;
   public UserAscess() {
	   try {
	   Properties pro=new Properties();
	   InputStream inStream=this.getClass().getResourceAsStream("/druid.properties");
	   pro.load(inStream);
	   DataSource ds=DruidDataSourceFactory.createDataSource(pro);
	   conn=ds.getConnection();
	   }catch(Exception e) {
		   e.printStackTrace();
	   }
   }

宿題:以前に行った学生管理プログラム[JDBC + Druid]を変更する

おすすめ

転載: blog.csdn.net/guoguo0717/article/details/108873278