sql >> Databasteknik >  >> RDS >> Mysql

Java-nybörjare behöver hjälp med databasanslutning

Jag skulle säga att din kod är ett exempel på många värsta metoder. Låt mig räkna sätten:

  1. Din Connection-klass är en dålig abstraktion som inte erbjuder något utöver java.sql.Connection.
  2. Om du använder din klass kommer du aldrig att kunna dra fördel av anslutningspoolning.
  3. Du kopplar din förarklass, din anslutnings-URL, etc. Du kan inte ändra den utan att redigera och kompilera om. En bättre lösning vore att externisera sådana saker.
  4. Att skriva ut ett felmeddelande i fångstblocken är mycket mindre information än att tillhandahålla hela stackspårningen.
  5. Din kod gör ont i mina ögon. Den följer inte Sun Java-kodningsstandarder.
  6. Din retrieveData Metoden är helt värdelös. Vad ska du göra med alla dessa tryckta uttalanden? Skulle det inte vara bättre att läsa in dem i en datastruktur eller ett objekt så att resten av din kod kan använda den informationen?
  7. Det är rowsAffected - "påverka" är verbet, "effekt" är substantivet. En annan variabel som inte gör någon nytta.

Du är på fel spår. Tänk om det.

Jag tror att den här koden kommer att vara mer användbar.

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. MySQL concat() för att skapa kolumnnamn som ska användas i en fråga?

  2. Kalla pl/sql-funktion i java?

  3. Ta bort dubblett från en tabell

  4. Åtgärda "FEL:  varje UNION-fråga måste ha samma antal kolumner" i PostgreSQL