El JDBC (b) - Uso de conexión de base de datos IDEA, una agrupación de conexiones de base de datos

1. Conexión de base de datos de IDEA

(1) Haga clic en el lado derecho de la base de datos de interfaz de IDEA
Aquí Insertar imagen Descripción
(2) Haga clic en + y, a continuación, haga clic en Origen de datos, y, finalmente, haga clic en MySQL
Aquí Insertar imagen Descripción
(3) Rellene el nombre de usuario y contraseña, prueba de la conexión
Aquí Insertar imagen Descripción
se muestra la pantalla (4) conexión exitosa
Aquí Insertar imagen Descripción
(5) Seleccionar para conectar base de datos para jdbcstudy de conexión, por ejemplo,
Aquí Insertar imagen Descripción
Aquí Insertar imagen Descripción
después de la interfaz (6) de base de datos de conexión jdbcstudy éxito
Aquí Insertar imagen Descripción
(7) Haga doble clic en el nombre del usuario, mesa abierta
Aquí Insertar imagen Descripción
(8) para actualizar los datos modificados
Aquí Insertar imagen Descripción
(9) para escribir código SQL
Aquí Insertar imagen Descripción
(10) la conexión falla, ver por qué
Aquí Insertar imagen Descripción

2. Transacción

O bien todos tener éxito o fracasar

  • la implementación del código
    ① transacción abierta conn.setAutoCommit (falso)
    ② un conjunto de negocios está terminado, confirma la transacción
    definida ROLLBACK ③ se pueden mostrar en una declaración de capturas, pero por defecto se producirá un error de reversión
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class TestTransaction2 {
    public static void main(String[] args) {
        Connection conn = null;
        PreparedStatement st = null;
        ResultSet rs = null;
        
        try {
            conn = JdbcUtils.getConnection();
            // 关闭数据库的自动提交,自动会开启事务
            conn.setAutoCommit(false); // 开启事务

            String sql1 = "update account set money = money-100 where name = 'A'";
            st = conn.prepareStatement(sql1);
            st.executeUpdate();

            int x = 1/0; // 报错

            String sql2 = "update account set money = money+100 where name = 'B'";
            st = conn.prepareStatement(sql2);
            st.executeUpdate();

            //业务完毕,提交事务
            conn.commit();
            System.out.println("成功!");

        } catch (SQLException e) {
            // 若果失败,则默认回滚
//            try {
//                conn.rollback();  // 如果失败则回滚事务
//            } catch (SQLException e1) {
//                e1.printStackTrace();
//            }
            e.printStackTrace();
        } finally {
            JdbcUtils.release(conn,st,rs);
        }
    }
}

3. agrupación de conexiones de base de datos

Database Connectivity - liberación - acabados
conexión - liberación es una pérdida de recursos del sistema,
la técnica de puesta en común: algunos recursos pre-preparación, ven sobre la conexión pre-preparada

  • El código abierto aplicación fuente de datos (es decir traído)
    DBCP
    C3P0
    Druid: Alibaba

Después de utilizar la agrupación de conexiones de base de datos, no es necesario para escribir el código para conectarse a la base de datos en el desarrollo del proyecto!

  • Para el DBCP, por ejemplo,
    la necesidad de utilizar el paquete jar: Commons-DBCP-1.4, bienes comunes -Pool-1.6

El directorio lib Culo una biblioteca, escrita en los dbcpconfig.properties archivo de proyecto

  • Cuando se utilizan los parámetros de conexión a la puesta en común de definir el aspecto

Número mínimo de conexiones: una agrupación de conexiones de base de datos se mantiene, por lo que si la cantidad de la aplicación a la base de datos no está conectado, habrá un gran número de recursos de conexión de base de datos se pierden.
número máximo de conexiones: se puede aplicar el número máximo de agrupaciones de conexiones, si las solicitudes de conexión de base de datos que exceden el número de veces, la solicitud de conexión de base de datos después que se añadirán a la cola de espera, lo que afectará a la operación de la base de datos después de que
el tiempo máximo de inactividad de
la obtención de una conexión de tiempo de espera de
tiempo de retransmisión los tiempos de conexión de prueba

#连接设置  这里面的名字,是DBCP数据源中定义好的
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/jdbcStudy?useUnicode=true&characterEncoding=utf8&useSSL=true
username=root
password=123456

#<!-- 初始化连接 -->
initialSize=10

#最大连接数量
maxActive=50

#<!-- 最大空闲连接 -->
maxIdle=20

#<!-- 最小空闲连接 -->
minIdle=5

#<!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60-->
maxWait=60000

#JDBC驱动建立连接时附带的连接属性属性的格式必须为这样:[属性名=property;]
#注意:"user""password" 两个属性会被明确地传递,因此这里不需要包含他们。
connectionProperties=useUnicode=true;characterEncoding=UTF8

#指定由连接池所创建的连接的自动提交(auto-commit)状态。
defaultAutoCommit=true

#driver default 指定由连接池所创建的连接的只读(read-only)状态。
#如果没有设置该值,则“setReadOnly”方法将不被调用。(某些驱动并不支持只读模式,如:Informix)
defaultReadOnly=

#driver default 指定由连接池所创建的连接的事务级别(TransactionIsolation)。
#可用值为下列之一:(详情可见javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE
defaultTransactionIsolation=READ_UNCOMMITTED

  • A continuación, escriba un DBCP Herramientas
import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

public class JdbcUtils_DBCP {

    private static DataSource dataSource = null;

    static {
        try{
            InputStream in =  JdbcUtils_DBCP.class.getClassLoader().getResourceAsStream("dbcpconfig.properties");
            Properties properties = new Properties();
            properties.load(in);

            //创建数据源 工厂模式 --> 创建
            dataSource = BasicDataSourceFactory.createDataSource(properties);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    //获取连接
    public static Connection getConnection() throws SQLException {
        return dataSource.getConnection(); //从数据源中获取连接
    }

    //释放连接资源
    public static void release(Connection conn, Statement st, ResultSet rs){
        if (rs!=null){
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (st!=null){
            try {
                st.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (conn!=null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

  • probado
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Date;

public class TestDBCP {
    public static void main(String[] args) {
        Connection conn = null;
        PreparedStatement st = null;

        try {
            conn = JdbcUtils_DBCP.getConnection();
            // 区别
            // 使用? 占位符代替参数
            String sql = "insert into users(id,`NAME`,`PASSWORD`,`email`,`birthday`) values(?,?,?,?,?)";

            st = conn.prepareStatement(sql); //预编译SQL,先写sql,然后不执行

            // 手动给参数赋值
            st.setInt(1,4); //id
            st.setString(2,"qinjiang");
            st.setString(3,"1232112");
            st.setString(4,"[email protected]");
            // 注意点: sql.Date   数据库   java.sql.Date()
            //          util.Date  Java     new Date().getTime() 获得时间戳
            st.setDate(5,new java.sql.Date(new Date().getTime()));

            //执行
            int i = st.executeUpdate();
            if (i>0){
                System.out.println("插入成功!");
            }

        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JdbcUtils_DBCP.release(conn,st,null);
        }
    }
}

  • DBCP y C3P0 utilizando métodos similares, paquete tarro requerido: c3p0-0.9.5.5, mchange-commons-java-0.2.19

  • Conclusión
    No importa cuál sea la fuente de datos, la esencia sigue siendo la misma, la interfaz de origen de datos no va a cambiar, el método no será

Publicado 62 artículos originales · ganado elogios 2 · Vistas 2735

Supongo que te gusta

Origin blog.csdn.net/nzzynl95_/article/details/104124777
Recomendado
Clasificación