Java JDBC工作流程

时间:2015-11-18 12:23:37

标签: java mysql jdbc

我目前正在构建一个使用JDBC和MySQL的小应用程序。

我有这个DB类。目前它只有一个连接的主方法,然后返回一些东西。现在这个工作正常了。但我想将其改为:

带有构造函数的DB类。 例如,调用不同SQL查询的多个方法我想要像这样调用用户。

db.user('约翰&#39);

那么我想要阻止什么:每次我创建一个新方法时必须连接。

很抱歉,如果问题可能有点不清楚。我是一个新的JDBC用户。

package application;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DB {

    //ToDo Add these credentials leter to a main config file.
    private static String connectionUrl = "jdbc:mysql://localhost:3306/tvh_jdbctesting";
    private static String connectionUser = "root";
    private static String connectionPassword = "root";
    private static String jdbc = "com.mysql.jdbc.Driver";


    DB(){

    }

    public static void main(String[] args) {
            Connection conn = null;
            Statement stmt = null;
            ResultSet rs = null;
            try {
                Class.forName(jdbc).newInstance();

                //Makes connection with the provided credentials.
                conn = DriverManager.getConnection(connectionUrl, connectionUser, connectionPassword);
                stmt = conn.createStatement();

                rs = stmt.executeQuery("SELECT * FROM test");
                while (rs.next()) {

                    String id = rs.getString("id");
                    String name = rs.getString("name");
                    String wachtwoord = rs.getString("wachtwoord");

                    System.out.println(id + name + wachtwoord);

                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try { if (rs != null) rs.close(); } catch (SQLException e) { e.printStackTrace(); }
                try { if (stmt != null) stmt.close(); } catch (SQLException e) { e.printStackTrace(); }
                try { if (conn != null) conn.close(); } catch (SQLException e) { e.printStackTrace(); }
            }
        }

    }

1 个答案:

答案 0 :(得分:1)

对于新的JDBC人来说,这实际上并不是一个糟糕的开端。我最大的挑剔是你不需要Class.forName返回的Class上的newInstance,它取决于你使用的驱动程序,你是否甚至需要Class.forName。

如果您在这里谈论的是一个小的单线程程序从命令行运行并完成它的事情,那么您可以通过让main方法创建连接,创建其他对象和调用它们,传入连接,然后让主程序在最后一个块中关闭连接。我宁愿明确地传递连接而不是使用一些DB类。

如果您的程序有多个必须同时进行数据库访问的线程,或者您希望程序能够在可能导致数据库连接中断的网络闪存中存活,您将开始考虑使用连接池。如果你发现JDBC太痛苦了Spring can help