【问题标题】:Storage Procedures vs Singleton Java存储过程与单例 Java
【发布时间】:2013-01-09 22:14:48
【问题描述】:

目前我以这种方式连接到数据库:

MyClass.java

try {
    DataSource datasource = JNDILoader.getDataSourceObject(pathToSource);
    Class.forName("net.sourceforge.jtds.jdbc.Driver");
    connection = datasource.getConnection();
    stmt = connection.prepareStatement("{call storageProcedureXXX(?,?)}");
    stmt.setString(1, "X");
    stmt.setString(2, "Y");            
    result = stmt.executeQuery();
}catch (SQLException){
    //TODO
}catch(Exception){
    //TODO
} 

这适用于发出数据请求的 1 个类,但是,如果我创建一个单例类并从中获取连接会更好吗? (性能?,可维护性?,简单性?)。哪个选项会更好:Singleton vs StorageProcedures per each request?。

注意:最后,应用程序(Restful Web Service)将需要连接到不同的数据库来为不同的专业类加载数据,甚至,这些类需要从纯文本中加载数据。

【问题讨论】:

  • 上下文是什么?这是在网络应用程序中吗?脚本?
  • 我真的很困惑,你在混合存储过程和单例,两个完全不同的东西在完全不同的抽象级别(封装业务逻辑和设计模式的方式)。
  • 我正在开发一个 Restful Web 服务,所以,上面的代码是连接到数据库的类的一部分,但是,因为我需要许多类来查询许多数据源(纯文本、数据库、 propertiesFiles 等),我想确定最好的方法,谢谢

标签: java sql performance stored-procedures singleton


【解决方案1】:

首先,您混合了两种不同的东西:单例和存储过程。 Singleton 是设计模式,stored procedures 是在数据库上执行的过程,通常封装一些业务逻辑。

您所写的并不是连接数据库的真正首选方式。如果您有很多请求并为每个请求子创建一个连接,那么您将遇到与数据库的连接过多的问题。你应该使用connection pool。 Java 最著名的是DBCP。另一个是c3p0

对于不同数据库的连接,您应该使用 Hibernate 之类的东西。

【讨论】:

    【解决方案2】:

    存储过程在数据库上执行。您通过连接向/从它传递/检索数据。

    你必须检查它是否是线程安全的(我不这么认为),你是否会进行并发调用。

    通常一个存储过程 = 1 个事务发生在数据库中。

    你为什么首先使用存储过程?

    【讨论】:

      猜你喜欢
      • 2011-10-12
      • 1970-01-01
      • 2012-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多