Mysql
 sql >> Database >  >> RDS >> Mysql

Il principiante di Java ha bisogno di aiuto nella connessione al database

Direi che il tuo codice è un esempio di molte pratiche peggiori. Fammi contare i modi:

  1. La tua classe Connection è una scarsa astrazione che non offre nulla oltre a quella di java.sql.Connection.
  2. Se usi la tua classe, non potrai mai sfruttare il pool di connessioni.
  3. Sei cablata la tua classe di driver, l'URL di connessione, ecc. Non puoi cambiarlo senza modificarlo e ricompilarlo. Una soluzione migliore sarebbe esternalizzare queste cose.
  4. La stampa di un messaggio di errore nei blocchi catch è molto meno di informazioni che fornire l'intera traccia dello stack.
  5. Il tuo codice mi fa male agli occhi. Non segue gli standard di codifica Sun Java.
  6. Il tuo retrieveData metodo è assolutamente inutile. Cosa farai con tutte quelle dichiarazioni stampate? Non sarebbe meglio caricarli in una struttura dati o in un oggetto in modo che il resto del codice possa utilizzare tali informazioni?
  7. È rowsAffected - "affetto" è il verbo, "effetto" è il sostantivo. Un'altra variabile che non funziona.

Sei sulla strada sbagliata. Ripensaci.

Penso che troverai questo codice più utile.

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;
    }
}