【问题标题】:Getting a JDBC database connection without using Servicefactory在不使用 Servicefactory 的情况下获取 JDBC 数据库连接
【发布时间】:2014-10-29 21:21:35
【问题描述】:

我正在使用以下 java 代码(在 ColdFusion 中)来获取数据库连接:

//Creating an object of servicefactory class
local.theServiceFactory = createObject('java','coldfusion.server.ServiceFactory');

//Creating the connection object simply by passing the DSN name
local.connect = theServiceFactory.getDataSourceService().getDataSource('dsnnane').getConnection();

效果很好。唯一的问题是我被告知由于安全原因我不能使用ServiceFactory。有没有其他方法可以获取连接对象?

【问题讨论】:

  • 使用较低级别的连接对象而不是仅使用cfquery 中的数据源名称的原因是什么?你也在共享主机上吗?
  • 因为在 cfquery 中使用数据源名称不会让我访问我需要的方法,即。将 AutoCommit 设置为 false。我正在做批量插入。 CF 不知道什么是批量插入 .
  • 但是您的数据库确实... 有没有办法在 SQL 本身中设置您需要的设置?例如将autocommit设置为false:stackoverflow.com/questions/1090240/…
  • @Dan - 哈哈,当我看到你的回复时,我正在写几乎完全相同的东西!

标签: java jdbc coldfusion


【解决方案1】:

我不会在调用堆栈中降低执行此类操作,而是研究直接通过 SQL 本身设置选项的方法。正如我在评论中发布的那样,您可以设置 autocommit values in SQL Server via T-SQL 本身。

【讨论】:

  • 是的,大多数数据库允许您覆盖 sql 中的设置,这意味着您可以在 cfquery 或存储过程中运行命令。 (编辑)要回答最初的问题,如果不访问ServiceFactory afaik,您将无法访问 CF 数据源。您可以创建一个 new jdbc 连接,但这在这里似乎没有必要。
  • 好吧,看到我使用连接对象来准备SQL,不认为那是方法。 local.connect.prepareStatement(local.sql) 开始循环..local.sqlStatement.setString(1,"foo")local.sqlStatement.setString(2,"bar") 结束循环..local.sqlStatement.executeBatch(); local.connect.commit(); local.sqlStatement.close(); local.connect.close();
  • 我想我们不清楚的是为什么您不能在带有<cfqueryparam>s 的普通旧<cfquery> 中运行它。是什么阻止了你回到我们知道的标准 CF 代码会做你所追求的事情:)。
  • 因为比死还慢。 Oracle 批量加载实际上比多次插入快 1000 倍。标准代码所做的是在 4000 次插入后堆空间用完并强制服务器重新启动。这是之后,就像,永远。
  • @jimcollins - 另一件事。我很少使用 Oracle,但使用 MS SQL,您还可以在单​​个 cfquery 中执行多个语句。 (MS SQL 2008 还支持多个VALUES 子句)。然后将命令一次性发送到数据库,而不是一次一个。基本上和executeBatch做同样的事情。
【解决方案2】:

我是这样用的

var datasourceService = createObject("Java", "coldfusion.server.ServiceFactory").getDataSourceService();
    var ds = datasourceService.getDatasource(variables.dsn).getConnection().getPhysicalConnection();
    ds.setAutoCommit(false);
    ...
    ds.setAutoCommit(true);

【讨论】:

  • 请重新阅读问题。它说由于安全限制,他们不能使用ServiceFactory
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-13
  • 1970-01-01
  • 2015-09-20
相关资源
最近更新 更多