sql >> Database >  >> RDS >> Mysql

Java-newbie heeft hulp nodig bij databaseverbinding

Ik zou zeggen dat uw code een voorbeeld is van vele slechtste praktijken. Laat me de manieren tellen:

  1. Je Connection-klasse is een slechte abstractie die niets anders biedt dan java.sql.Connection.
  2. Als je je klas gebruikt, zul je nooit profiteren van pooling van verbindingen.
  3. Je bedraad je stuurprogrammaklasse, je verbindings-URL, enz. Je kunt het niet wijzigen zonder het te bewerken en opnieuw te compileren. Een betere oplossing zou zijn om dergelijke dingen te externaliseren.
  4. Het afdrukken van een foutmelding in de catch-blokken is veel minder informatie dan het leveren van de volledige stacktracering.
  5. Je code doet pijn aan mijn ogen. Het voldoet niet aan de codeerstandaarden van Sun Java.
  6. Uw retrieveData methode is volkomen waardeloos. Wat ga je doen met al die gedrukte verklaringen? Zou het niet beter zijn om ze in een datastructuur of object te laden, zodat de rest van je code die informatie kan gebruiken?
  7. Het is rowsAffected - "affect" is het werkwoord, "effect" is het zelfstandig naamwoord. Nog een variabele die geen goed doet.

Je bent op het verkeerde spoor. Denk er nog eens over na.

Ik denk dat je deze code nuttiger zult vinden.

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


  1. MariaDB JSON_ARRAYAGG() uitgelegd

  2. MySQL relationele databases gebruiken op Fedora 14

  3. Datum- en tijdseenheden in MySQL (volledige lijst)

  4. Hoe de beginwaarde en automatische verhoging in MySQL in te stellen?