Avanzada JDBC y dbUtils

1. BaseDao suplemento de la vía

1.1 Análisis de Requerimientos

        Realizar una consulta, el tipo de retorno es Object [], y se almacena en la colección de lista, el tipo de valor de retorno real es List <Object []>
        procesamiento de consultas los resultados de los datos no se pueden asignar a un objeto de clase, no el modo de completado ORM, resultados de la consulta, de acuerdo con el orden de lectura de los campos de la base de datos y los datos guardados en la matriz de objeto, con el fin de satisfacer las necesidades de múltiples filas de consulta de datos, almacenados en la matriz colección lista de objetos

1.2 Métodos de análisis

[Permiso] modificador: public
[volver] del tipo: List <Object []>
[nombre del método]: consulta
[lista de parámetros formales]:
        1.String SQL, la consulta SELECT
        2. los parámetros correspondientes para la actual sentencia SQL
declaración de método:

	public List<Object[]> query(String sql, Object[] parameters)

operación específica:

/**
 * 通用查询方法,返回值是对应字段数据的Object类型数组,并且存储于List集合
 *
 * @param sql        Select查询SQL语句
 * @param parameters 对应当前SQL语句的参数
 * @return 包含数据行数据的List<Object[]> 如果没有查询到数据,返回null
 */
public List<Object[]> query(String sql, Object[] parameters) {
    ResultSet resultSet = null;
    Connection connection = null;
    PreparedStatement preparedStatement = null;
    List<Object[]> list = new ArrayList<>();
    try {
        connection = JdbcUtil.getConnection();
        preparedStatement = connection.prepareStatement(sql);
        /*
        获取SQL语句参数个数!!!通过SQL语句元数据获取(ParameterMetaData)
         */
        int parameterCount = preparedStatement.getParameterMetaData().getParameterCount();
        /*
        parameterCount 参数个数不能为0
        parameters != null 参数数组不为null,因为存在当前方法没有参数,数组传入null
        parameterCount == parameters.length 参数个数和传入的Object类型参数数容量一致
         */
        if (parameterCount != 0 && parameters != null && parameterCount == parameters.length)
            for (int i = 0; i < parameters.length; i++) {
                /*
                SQL语句参数下标从1开始
                数组数据下标从0开始
                 */
                preparedStatement.setObject(i + 1, parameters[i]);
            }
        }
        resultSet = preparedStatement.executeQuery();
        ResultSetMetaData metaData = resultSet.getMetaData();
        int columnCount = metaData.getColumnCount();
        while (resultSet.next()) {
            Object[] values = new Object[columnCount];
            for (int i = 1; i <= columnCount; i++) {
                values[i - 1] = resultSet.getObject(i);
            }
            list.add(values);
        }
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        JdbcUtil.close(connection, preparedStatement, resultSet);
    }
    return list.size() != 0 ? list : null;
}

1.3 Optimización BaseDao

// Ctrl + Alt + M 光标选择代码块生成一个方法
/**
 * 类内私有化处理PreparedStatement预处理SQL语句和参数数组赋值操作
 *
 * @param preparedStatement 预处理SQL语句对应的PreparedStatement对象
 * @param parameters        对应当前SQL语句的Object类型数组
 * @throws SQLException SQL异常
 */
private void parseSqlParameter(PreparedStatement preparedStatement, Object[] parameters) throws SQLException {
    /*
    获取SQL语句参数个数!!!通过SQL语句元数据获取(ParameterMetaData)
    */
    int parameterCount = preparedStatement.getParameterMetaData().getParameterCount();
    
    /*
    parameterCount 参数个数不能为0
    parameters != null 参数数组不为null,因为存在当前方法没有参数,数组传入null
    parameterCount == parameters.length 参数个数和传入的Object类型参数数容量一致
    */
    if (parameterCount != 0 && parameters != null && parameterCount == parameters.length) {
        for (int i = 0; i < parameters.length; i++) {
            /*
            SQL语句参数下标从1开始
            数组数据下标从0开始
            */
            preparedStatement.setObject(i + 1, parameters[i]);
        }
    }
}

2. El proyecto utiliza JdbcUtil, BaseDao operaciones de persistencia de datos completa

2.1 Requisitos

        Usar la base de datos como datos de persistencia de las operaciones son muy comunes.
        Pelar los datos originales guardar formato (antes de guardar los datos en formato JSON), y la capa Dao con el
        se requiere capa de terminación Dao proyecto para heredar las operaciones CRUD BaseDao de datos. Y la base de datos de clase de entidad y el proyecto actual es la correspondencia entre:
                la tabla de datos ==> nombre de la clase de entidad del mismo
                nombre de campo ==> variable miembro nombre de
                tipo de datos ==> miembro del tipo de datos variables
para completar una versión simple del Sistema de Gestión de Estudiantes:

dao
	interface StudentDao
	impl(package)
		StudentDaoImpl
service
	interface StudentService
	impl(package)
		StudentServiceImpl
view
	interface ProjectView
	impl(package)
		ProjectViewImpl
mainproject
	main方法

2. Base de datos de diseño

campo Tipos de datos
carné de identidad int PRI AI
nombre varchar (50) NN
años int NN
género booleano NN
Puntuación flotar (5,2) NN
habla a NN texto

Aquí Insertar imagen Descripción

Publicado 36 artículos originales · ganado elogios 77 · Vistas a 10000 +

Supongo que te gusta

Origin blog.csdn.net/qq_41986648/article/details/105100469
Recomendado
Clasificación