Use a operação do pool de conexão DBCP e C3P0
por meio de JDBC 1. Use o pool de conexão C3P0 por meio de JDBC
C3P0 é um pool de conexão JDBC de código aberto, que implementa a origem de dados e a ligação JNDI, suporta a especificação JDBC3 e a extensão padrão JDBC2. Projetos de código aberto que atualmente o usam incluem Hibernate, Spring, etc.
Por exemplo:
criar tabela t_user (
user_id int chave primária auto_increment,
user_name varchar (20),
user_age int,
user_sex bit,
user_address varchar (30),
user_day datetime
);
2. Crie um projeto Java
3. Importe o pacote de dependência
c3p0-0.9.5.2.jar
mchange-commons-java-0.2.15.jar
mysql-connector-java-5.1.38.jar
4. Crie o arquivo de configuração c3p0 em ser [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. Crie 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. Crie uma classe de acesso ao banco de dados
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();
}
}
}
}
Vantagens: Não há necessidade de gravar manualmente a operação de criação de um objeto de conexão de banco de dados, porque a configuração do pool de conexão de banco de dados de c3p0 foi configurada e inicializada com sucesso.
Fornece eficiência de execução do programa.
Você não precisa modificar o código-fonte quando alternar o banco de dados no futuro; você só precisa modificar a configuração do conjunto de conexões de banco de dados c3p0.
2. Use o pool de conexão dbcp por meio de JDBC. O
pool de conexão de banco de dados é responsável por alocar, gerenciar e liberar conexões de banco de dados. Ele permite que os aplicativos reutilizem uma conexão de banco de dados existente em vez de restabelecer uma; libera conexões de banco de dados cujo tempo ocioso excede o máximo tempo Para evitar a perda da conexão com o banco de dados causada por não liberar a conexão com o banco de dados. Essa tecnologia pode melhorar significativamente o desempenho das operações do banco de dados.
Exemplos:
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. Crie um projeto java
2. Importe o pacote jar
[commons-dbcp-1.4.jar
commons-dbutils-1.6.jar
commons-pool-1.6.jar]
3. Crie um arquivo de configuração de conexão de banco de dados em 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. Crie JavaBean
5. Crie uma classe de acesso ao banco de dados
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. O acesso JDBC ao Druid
Druid é primeiro um conjunto de conexões de banco de dados. Druid é atualmente o melhor pool de conexão de banco de dados, em termos de funcionalidade, desempenho e escalabilidade, ele supera outros pools de conexão de banco de dados, incluindo DBCP, C3P0, BoneCP, Proxool e JBoss DataSource. O Druid implantou mais de 600 aplicativos no Alibaba e foi rigorosamente testado em um ambiente de produção em grande escala por mais de um ano. Druid é um pool de conexão de banco de dados desenvolvido pela Alibaba chamado Monitoring!
Ao mesmo tempo, o Druid não é apenas um pool de conexão de banco de dados, ele inclui quatro partes:
Druid é um componente JDBC, que inclui três partes:
um sistema de plug-in baseado no modelo Filter-Chain.
DruidDataSource - pool de conexão de banco de dados eficiente e gerenciável.
Recursos do SQLParser
Druid
1. Substitua DBCP e C3P0. O Druid fornece um pool de conexão de banco de dados eficiente, poderoso e escalonável.
2. Você pode monitorar o desempenho de acesso ao banco de dados.O Druid fornece um poderoso plug-in StatFilter integrado, que pode realizar estatísticas detalhadas sobre o desempenho de execução de SQL, o que é útil para análise de desempenho de acesso ao banco de dados online.
3. A senha do banco de dados é criptografada. Gravar a senha do banco de dados diretamente no arquivo de configuração é um mau comportamento e pode facilmente levar a problemas de segurança. Tanto DruidDruiver quanto DruidDataSource oferecem suporte a PasswordCallback.
4. Log de execução SQL. O Druid fornece diferentes LogFilters, que podem suportar Common-Logging, Log4j e JdkLog. Você pode selecionar o LogFilter correspondente conforme necessário para monitorar o acesso ao banco de dados de seu aplicativo.
5. Estenda JDBC.Se você tiver requisitos de programação para a camada JDBC, você pode usar o mecanismo de filtro fornecido pelo Druid para escrever facilmente plug-ins de extensão para a camada JDBC.
Portanto, o Druid pode:
1. Atuar como um pool de conexão de banco de dados.
2. Você pode monitorar o desempenho de acesso ao banco de dados.
3. Obtenha logs de execução de SQL.
Por exemplo:
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. Crie um projeto java
2. Importe o pacote jar [druid-1.1.10.jar]
3. Crie um arquivo de configuração de conexão de banco de dados [xxxxxxxx.properties] em src
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. Crie JavaBean
5. Crie uma classe de acesso ao banco de dados
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();
}
}
Lição de casa: Modificar o programa de gerenciamento de alunos [JDBC + Druid] feito antes