11
回答
ActiveJDBC 的数据库连接管理
滴滴云服务器,限时包月0.9元,为开发者而生>>>   

ActiveJDBC 提供了两个类用于数据库连接管理,分别是: Base.java & DB.java.

ActiveJDBC 使用 ThreadLocal 来管理连接,如下面代码所示,在同一个线程中所有的数据库操作会共用一个 Connection 实例:

public static void main(String[] args) {
    Base.open("com.mysql.jdbc.Driver", "jdbc:mysql://localhost/test",
        "the_user", "the_password");
    Employee.findAll().dump();
    Base.close();
}

在第一行代码中,Base 打开一个数据库连接并将它于当前线程绑定,同时该连接会有一个缺省的名字——default。

而 DB 类和 Base 类有什么区别呢?

当你需要在一个应用中连接多个数据库的时候,DB 类就可以帮到你,看下面的代码

new DB("database2").open(
   "com.mysql.jdbc.Driver", 
   "jdbc:mysql://localhost/test", 
   "root", 
   "p@ssw0rd"
);

上述的代码中,会打开一个数据库连接,并将该连接绑定到当前线程中名为 database2 。

如果你需要将某个 Model 类绑定到第二个数据库,可以使用如下注解方式:

@DbName("corporation")
public class Employee extends Model {}

这样 ActiveJDBC 就知道如何获取该 Model 类相关的数据。

看看下面的代码:

@DbName("corporation")
public class Employee extends Model {}

@DbName("university")
public class Student  extends Model {}

public class Main {
    public static void main(String[] args) {
        new DB("corporation").open("com.mysql.jdbc.Driver", "jdbc:mysql://localhost/test", "root", "p@ssw0rd");
        new DB("university").open("oracle.jdbc.driver.OracleDriver", "jdbc:oracle:thin:@localhost:1521:xe", "activejdbc", "activejdbc");

        Employee.deleteAll();
        Student.deleteAll();

        Employee.createIt("first_name", "John", "last_name", "Doe");
        Employee.createIt("first_name", "Jane", "last_name", "Smith");

        Student.createIt("first_name", "Mike", "last_name", "Myers");
        Student.createIt("first_name", "Steven", "last_name", "Spielberg");

        System.out.println("*** Employees ***");
        Employee.findAll().dump();
        System.out.println("*** Students ***");
        Student.findAll().dump();

        new DB("corporation").close();
        new DB("university").close();
    }
}

关于 ActiveJDBC 的连接池管理:

很不幸,ActiveJDBC 不管理连接池,也不支持第三方的连接池管理组件,例如 c3p0 之类的。

如果你要使用连接池,那么你可以使用容器提供的数据源 JNDI ,代码如下:

Base.open("jdbc/test");
举报
红薯
发帖于6年前 11回/1K+阅
共有11个评论 最后回答: 6年前

我觉得JDBC连接池负责的功能越来越多,也可以使用类似Java IO那样的decorator模式来对功能进行插件化的实现了。

常见功能包括:

1、建立物理连接,通常有JDBC驱动完成

2、连接泄漏检测

3、JDBC对象缓存

4、JDBC连接池

5、JDBC连接池的运行统计、监控、JMX

试了一下,sql没有问题,证明数据库连接是正确的。

但是使用Model时,报错:

activejdbc.InitException: failed to determine Model class name, are you sure models have been instrumented

 

能否把你的项目发我看看

顶部