Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Java-Neuling braucht Hilfe bei der Datenbankverbindung

Ich würde sagen, Ihr Code ist ein Beispiel für viele schlechte Praktiken. Lassen Sie mich die Wege zählen:

  1. Ihre Connection-Klasse ist eine schlechte Abstraktion, die nichts über die von java.sql.Connection hinaus bietet.
  2. Wenn Sie Ihre Klasse verwenden, werden Sie niemals die Vorteile des Verbindungspoolings nutzen können.
  3. Sie verdrahten Ihre Treiberklasse, Ihre Verbindungs-URL usw. fest. Sie können sie nicht ändern, ohne sie zu bearbeiten und neu zu kompilieren. Eine bessere Lösung wäre, solche Dinge zu externalisieren.
  4. Das Drucken einer Fehlermeldung in den Catch-Blöcken ist weitaus weniger Information als die Bereitstellung des gesamten Stack-Trace.
  5. Ihr Code tut mir in den Augen weh. Es entspricht nicht den Java-Codierungsstandards von Sun.
  6. Ihre retrieveData Methode ist völlig wertlos. Was werden Sie mit all diesen gedruckten Erklärungen tun? Wäre es nicht besser, sie in eine Datenstruktur oder ein Objekt zu laden, damit der Rest Ihres Codes diese Informationen verwenden könnte?
  7. Es sind rowsAffected - "beeinflussen" ist das Verb, "bewirken" ist das Substantiv. Eine weitere Variable, die nichts nützt.

Du bist auf dem falschen Weg. Überdenken Sie es.

Ich denke, Sie werden diesen Code hilfreicher finden.

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