sql >> Databáze >  >> RDS >> Mysql

Nováček Java potřebuje pomoc s připojením k databázi

Řekl bych, že váš kód je příkladem mnoha nejhorších praktik. Dovolte mi spočítat způsoby:

  1. Vaše třída Connection je chabá abstrakce, která nenabízí nic nad rámec třídy java.sql.Connection.
  2. Pokud používáte svou třídu, nikdy nebudete moci využívat sdružování připojení.
  3. Napevno propojíte třídu ovladače, adresu URL připojení atd. Bez úprav a překompilování je nelze změnit. Lepším řešením by bylo takové věci externalizovat.
  4. Tisk chybové zprávy v blocích catch je mnohem méně informací než poskytnutí celého trasování zásobníku.
  5. Z vašeho kódu mě bolí oči. Nesplňuje standardy kódování Sun Java.
  6. Vaše retrieveData metoda je naprosto bezcenná. Co uděláte se všemi těmi vytištěnými prohlášeními? Nebylo by lepší je načíst do datové struktury nebo objektu, aby zbytek vašeho kódu mohl tyto informace použít?
  7. Je to rowsAffected - "účinek" je sloveso, "účinek" je podstatné jméno. Další proměnná, která nedělá dobře.

Jste na špatné cestě. Přemysli si to.

Myslím, že tento kód bude pro vás užitečnější.

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. Nástroj pro obnovu zálohy SQL k opravě poškozené zálohy SQL – Recenze produktu – Příspěvek hosta od Daniela Jonese

  2. Nelze se připojit k MySQL Workbench na Macu. Nelze se připojit k serveru MySQL na '127.0.0.1' (61) Mac Macintosh

  3. Jak dynamicky transponovat řádky do sloupců v MySQL

  4. MySQL find_in_set s více vyhledávacími řetězci