sql >> Base de Datos >  >> RDS >> Mysql

Java newbie necesita ayuda en la conexión de la base de datos

Diría que su código es un ejemplo de muchas de las peores prácticas. Déjame contar las formas:

  1. Su clase Connection es una pobre abstracción que no ofrece nada más que java.sql.Connection.
  2. Si usa su clase, nunca podrá aprovechar la agrupación de conexiones.
  3. Conectas tu clase de controlador, tu URL de conexión, etc. No puedes cambiarlo sin editarlo y volver a compilarlo. Una mejor solución sería externalizar tales cosas.
  4. Imprimir un mensaje de error en los bloques catch es mucha menos información que proporcionar todo el seguimiento de la pila.
  5. Tu código me hace daño en los ojos. No sigue los estándares de codificación Sun Java.
  6. Su retrieveData método es completamente inútil. ¿Qué harás con todas esas declaraciones impresas? ¿No sería mejor cargarlos en una estructura de datos u objeto para que el resto de su código pueda usar esa información?
  7. Es rowsAffected - "afectar" es el verbo, "efecto" es el sustantivo. Otra variable que no está haciendo ningún bien.

Estás en el camino equivocado. Reconsiderarlo.

Creo que este código le resultará más útil.

package persistence;

import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class DatabaseUtils
{
    public static Connection createConnection(String driver, String url, String username, String password) throws ClassNotFoundException, SQLException
    {
        Class.forName(driver);

        if ((username == null) || (password == null) || (username.trim().length() == 0) || (password.trim().length() == 0))
        {
            return DriverManager.getConnection(url);
        }
        else
        {
            return DriverManager.getConnection(url, username, password);
        }
    }

    public static void close(Connection connection)
    {
        try
        {
            if (connection != null)
            {
                connection.close();
            }
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }
    }


    public static void close(Statement st)
    {
        try
        {
            if (st != null)
            {
                st.close();
            }
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }
    }

    public static void close(ResultSet rs)
    {
        try
        {
            if (rs != null)
            {
                rs.close();
            }
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }
    }

    public static void rollback(Connection connection)
    {
        try
        {
            if (connection != null)
            {
                connection.rollback();
            }
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }
    }

    public static List<Map<String, Object>> map(ResultSet rs) throws SQLException
    {
        List<Map<String, Object>> results = new ArrayList<Map<String, Object>>();

        try
        {
            if (rs != null)
            {
                ResultSetMetaData meta = rs.getMetaData();
                int numColumns = meta.getColumnCount();
                while (rs.next())
                {
                    Map<String, Object> row = new HashMap<String, Object>();
                    for (int i = 1; i <= numColumns; ++i)
                    {
                        String name = meta.getColumnName(i);
                        Object value = rs.getObject(i);
                        row.put(name, value);
                    }
                    results.add(row);
                }
            }
        }
        finally
        {
            close(rs);
        }

        return results;
    }
}