访问数据库的最佳方式

时间:2015-04-01 16:02:33

标签: java

我对Java比较陌生。我正在修补一个小程序,该程序使用带有几个字段的JFrame来查询和插入数据库。

我目前有一个除了创建数据库连接之外什么都不做的类。从那里,我有其他类来执行SELECT或INSERT数据库功能。其中每个都是通过为数据库连接类创建新对象开始的。完成后连接会关闭。

对此我不熟悉,我只是想看看这是否是访问数据库的最佳方式,即:每次按下按钮时创建和关闭一个全新的连接。它执行所需的任务,但如果有更有效或明智的方法来做到这一点,我很想知道。

我可以提供您可能需要查看的任何代码。谢谢!

2 个答案:

答案 0 :(得分:1)

从java访问数据库的常用方法是连接池。我推荐你这个:http://jolbox.com/

在您的数据库交互代码中,您只需从池创建连接(实际上它借用了池中的连接),并且在请求之后只需关闭连接(实际上它返回到池的连接)。     

public class DAO {
    private final DataSource ds;

    public void foo(...) {
        Connection connection = ds.getConnection();
        try {
            // do work there
        } finally {
            connection.close();
        }
    }
}


public class MainPanel extends JPanel {
    private final DAO dao;

    public MainPanel(DAO dao) {
        this.dao = dao;
    }

    // ...
}


public class Main {
    public static void main(String[] args) {
        Class.forName("org.hsqldb.jdbcDriver");
        BoneCPDataSource ds = new BoneCPDataSource();
        ds.setJdbcUrl("jdbc:hsqldb:mem:test");
        ds.setUsername("sa");
        ds.setPassword("");

        DAO dao = new DAO(ds);
        MainPanel mainPanel = new MainPanel(dao);
        // ...
    }
}

答案 1 :(得分:1)

您可以创建一次连接,然后使用它多少次。有两种标准方法:单例和依赖注入。由于单身因素有多种原因通常不是一个好的解决方案,所以我坚持使用依赖注入。

我们走了。

  • 数据库类(伪代码):

    public class Database implements Closeable {
        private final DBConnection connection;
    
        public Database(String url, String db, String user, String password) {
            // TODO: establish connection
        }
    
        // TOOD implement methods for working with DB, for example:
        public void add(String foo, String bar) {
            // TODO
        }
    
        @Override
        public void close() throws IOException {
            connection.close();
        }
    }
    
  • 使用数据库的GUI:

    public class GUI extends JPanel {
        private Database db;
    
        public GUI(Database db) {
            this.db = db;
        }
    
        // TODO implement GUI, use `db` to access the database 
    }
    
  • 初始化应用程序:

    public static void main(String[] args) {
        Database db = new Database(...);
        GUI gui = new GUI(db);
    
        // TODO: create JFrame, add GUI to it
    }
    

这可能适用于大多数情况。对于更复杂或运行时间较长的软件,一直不使用数据库连接(或者您需要更多数据库连接),最好在未使用等情况时关闭连接。对于这种情况,请使用连接池,如Denis Borovikov所示:https://stackoverflow.com/a/29395796/2709026