Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Nowicjusz Java potrzebuje pomocy w połączeniu z bazą danych

Powiedziałbym, że twój kod jest przykładem wielu najgorszych praktyk. Pozwól, że policzę sposoby:

  1. Twoja klasa Connection jest słabą abstrakcją, która nie oferuje niczego ponad klasę java.sql.Connection.
  2. Jeśli używasz swojej klasy, nigdy nie będziesz mógł skorzystać z puli połączeń.
  3. Tworzysz na stałe klasę sterownika, adres URL połączenia itp. Nie możesz tego zmienić bez edycji i ponownej kompilacji. Lepszym rozwiązaniem byłoby uzewnętrznienie takich rzeczy.
  4. Drukowanie komunikatu o błędzie w blokach catch to znacznie mniej informacji niż dostarczenie całego śladu stosu.
  5. Twój kod rani mnie w oczy. Nie jest zgodny ze standardami kodowania Sun Java.
  6. Twoje retrieveData metoda jest całkowicie bezwartościowa. Co zrobisz z tymi wszystkimi wydrukowanymi oświadczeniami? Czy nie byłoby lepiej załadować je do struktury danych lub obiektu, aby reszta kodu mogła wykorzystać te informacje?
  7. Jest to rowsAffected - "efekt" to czasownik, "efekt" to rzeczownik. Kolejna zmienna, która nie robi nic dobrego.

Jesteś na złej drodze. Przemyśl to.

Myślę, że ten kod okaże się bardziej pomocny.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zaktualizować zestaw identyfikatorów od 1?

  2. Jakie jest znaczenie graweru (AKA backtick) cytowanych znaków w MySQL?

  3. Grupa MySQL według godzin

  4. Zdobądź wszystkich użytkowników z wyjątkiem aktualnie zalogowanego użytkownika w laravel eloquent

  5. mysql TIME_WAIT; problem ze zbyt wieloma połączeniami