首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JDBC最佳实践

JDBC最佳实践
EN

Stack Overflow用户
提问于 2011-05-30 01:39:09
回答 3查看 4.6K关注 0票数 6

我将创建将在数据库上操作的类。这个类将有函数addRecord(),getAllRecords(),诸如此类。我正在寻找一种设计类的好方法。我应该: 1)为每个函数创建新的连接。如下所示:

代码语言:javascript
复制
void readRecords(){
    try {
        Connection con = DriverManager.getConnection (connectionURL);

        Statement stmt = con.createStatement();

        ResultSet rs = stmd.executeQuery("select moviename, releasedate from movies");

        while (rs.next())
            System.out.println("Name= " + rs.getString("moviename") + " Date= " + rs.getString("releasedate");
    }
    catch (SQLException e) {
        e.printStackTrace();
    }
    catch (Exception e) {
        e.printStackTrace();
    }
    finally {
        con.close();
    }
}

2)最好有一个连接作为成员变量

代码语言:javascript
复制
class MyClass{
     private  Connection con;

     public MyClass(){
          con = DriverManager.getConnection (connectionURL);
     }
}

并且只为每个函数创建语句。

3)或者别的什么.

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-05-30 01:42:25

如果有频繁的常规jdbc调用,则使用数据库connection pool

票数 6
EN

Stack Overflow用户

发布于 2011-05-30 02:10:16

这两种方法都很糟糕。第一种方法不允许您实现适当的事务管理,因为您不能在同一事务中调用多个方法。后者需要不必要地创建多个对象。

最好的方法是引入当前连接的概念,它可以从某种事务上下文中获得。基本上,它应该看起来像这样:

代码语言:javascript
复制
beginTransaction(...); // Opens connection and starts transaction

readRecords(...); // Uses the current connection
addRecord(...);
...

commitTransaction(...); // Commits transaction and closes connection

最简单但不是很优雅的实现是在调用方法中打开一个Connection (它定义事务的边界),并将其作为参数传递给您的方法。

更复杂的解决方案是为当前的Connection创建一个static ThreadLocal存储,在启动事务时将其放在那里,并在您的方法中从该存储获取它。有些框架隐式地实现了这种方法,例如Spring Framework

请注意,连接池与这些问题完全正交。

票数 11
EN

Stack Overflow用户

发布于 2011-05-30 02:03:20

连接池是一条可行的道路。最大的原因是,平均而言,数据库访问(DML等)所需的时间比创建连接然后关闭连接所需的时间要短得多。此外,不要忘记在事务完成后关闭您的ResultSet、PreparedStatement和连接变量。

您可以使用tomcat或apache连接池类。例如,在包中定义了THese类

org.apache.commons.dbcp.*;

org.apache.tomcat.dbcp.dbcp.*;

其中dbcp代表数据库连接池。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6169301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档