sql >> データベース >  >> RDS >> Mysql

Java初心者はデータベース接続の助けが必要です

    あなたのコードは多くの最悪の慣行の例だと思います。方法を数えましょう:

    1. Connectionクラスは、java.sql.Connectionの抽象化以上のものを提供しない不十分な抽象化です。
    2. クラスを使用する場合、接続プールを利用することはできません。
    3. ドライバークラスや接続URLなどを配線します。編集して再コンパイルしないと変更できません。より良い解決策は、そのようなものを外部化することです。
    4. catchブロックにエラーメッセージを出力することは、スタックトレース全体を提供するよりもはるかに少ない情報です。
    5. あなたのコードは私の目を傷つけます。 SunJavaコーディング標準に準拠していません。
    6. あなたのretrieveData 方法は全く無価値です。あなたはそれらすべての印刷された声明をどうしますか?それらをデータ構造またはオブジェクトにロードして、コードの残りの部分がその情報を使用できるようにする方がよいのではないでしょうか?
    7. rowsAffectedです -「affect」は動詞、「effect」は名詞です。何の役にも立たないもう1つの変数。

    あなたは間違った方向に進んでいます。考え直してください。

    このコードの方が役立つと思います。

    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. PHP宝くじ当選者ピッカー

    2. 1回の選択でカテゴリごとに最新の2つのアイテムを取得する方法(mysqlを使用)

    3. mysqlで秒なしで日付と時刻を選択するにはどうすればよいですか?

    4. クライアントPCでのLocalDBの展開