问题标签 [jtds]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
6987 浏览

sql-server - jTDS 套接字挂起与 C3P0 连接检查 (SQL Server 2008 R2)

这里是环境:

  • 爪哇 5
  • 在 Windows 上运行 Tomcat 6.0.18 的 Web 应用程序(不确定版本)
  • 数据库:SQL Server 2008 R2
  • JDBC 驱动程序:jTDS 1.2.5
  • 连接池提供程序:C3P0 0.9.1.2

我正在尝试调试客户遇到的问题。基本上每隔几周,我们的 Web 应用程序就会锁定在他们的服务器上,并且他们无法访问它。重新启动可以解决问题。进一步调查表明,一切都被锁定的原因是一切都在等待数据库连接返回。我认为问题可能出在 SQL Server 上,而不是 C3P0。

我相信正在发生的是 C3P0 的“空闲检查查询”正在挂起。查询是这样的:

看起来此查询已运行,​​并且从未返回结果。这是我在线程转储中看到的内容。注意DefaultConnectionTester.activeCheckConnection(),这是空闲检查:

但是什么会导致这样一个简单的查询在从套接字读取时挂起?我不相信该表上会有任何数据库锁定,因为它完全由 C3P0 管理并且从未插入/更新。此外,任何从池中获取连接的失败尝试(如果这是挂起的原因),我希望在某个地方有一个堆栈跟踪。相反,我看到的是应用程序刚刚锁定,因为所有未来的连接请求都在等待这个“空闲检查”完成。

这是等待“空闲检查”完成的线程之一:

通过查看 C3P0 的源代码,顶部的两行:

...仅在连接等待“空闲检查”时发生。

不幸的是,这是一个客户,我不能在这里报告环境的确切细节。但我可以在下次通话时向他们提出任何建议。

更新

他们的申请今天再次被锁定。以下是我们迄今为止尝试过的事情:

  • 他们已更新到最新的 jTDS 驱动程序 (1.2.5)
  • 我已将socketTimeout连接字符串上的属性设置为 300,但驱动程序在 5 分钟后仍停留在 socketRead0() 上
  • 我们将活动检查查询从“select * from c3p0_connection_test_table”更改为“select 1”
  • 我们在 C3P0 中添加了unreturnedConnectionTimeoutanddebugUnreturnedConnectionStackTraces属性(不过,这些并没有捕获断开的连接)

以下是我们设置的所有 C3P0 连接属性:

发生的一件奇怪的事情是,当应用程序被锁定时,我们尝试使用应用程序用户登录 SQL Server Management Studio,但它不会让我们进入(我认为这只是一个正常的超时错误)。数据库已启动并侦听端口 1433(使用 验证telnet),因此我认为这意味着已达到与数据库的最大连接数。不过,我不确定这是否有助于确定此问题的原因。

领导跟随但没有成功

  • 此人的操作系统存在问题,并且可能与服务器上的 NIC 卡数量有关
  • 下面的回答者向我指出了旧版本 jTDS 中的错误

有用的答案可以要求我检查客户机器上的某些内容,或者指出可能的根本原因。无论答案如何帮助我追查到这一点,都会得到赏金。

0 投票
1 回答
2209 浏览

java - 使用java连接到外部数据库

我有一个连接到 MS SQL 数据库的 java 程序。该程序在通过 Eclipse 运行时运行良好,但是当我通过 AIX 运行它时出现错误:

java.sql.SQLException:网络错误 IOException:远程主机拒绝了尝试的连接操作。

我正在使用 jtds 连接:

0 投票
2 回答
2807 浏览

java - 通过 telnet 连接到外部数据库

我有一个连接到 MS SQL 数据库的 java 程序。该程序在通过 Eclipse 运行时运行良好,但是当我通过 AIX 运行它时出现错误:

java.sql.SQLException:网络错误 IOException:远程主机拒绝了尝试的连接操作。

我可以成功 ping 服务器,但无法 telnet 进入服务器。我也无法从我的 Windows 桌面远程登录。

我正在使用 jtds 连接:

这是 jTDS 中有关该问题的一些文档,但我仍然无法解决该问题。

0 投票
1 回答
1872 浏览

java - 如何在 Netbeans 中使用 sqlserver&jtds 驱动程序设置休眠

我正在尝试使用 jtds 驱动程序将 Netbeans 设置为与 Hibernate 一起使用以连接到 SQLSERVER 2008。

sqlserver 2008 是本地安装的,没有用户名和密码。

这是hibernate.cfg:

当我尝试使用 Hibernate 逆向工程向导设置 Hibernate 逆向工程文件时,我收到以下错误:

无法连接。无法使用 net.sourceforge.jtds.jdbc.Driver 建立与 jdbc:jtds:sqlserver://localhost:2545/MyDB 的连接(I/O 错误:SSO 失败:未加载本机 SSPI 库。检查 java.library.path系统属性。)。

我在 WINDOWS\system32 中有 ntlmauth.dll。

0 投票
3 回答
2118 浏览

sql-server - 即使启用了 MARS,对 MSSQL 的 SQL 查询也包含暂停

我们正在测试来自 jTDS 和 Microsoft 的 JDBC 驱动程序,并且我们在查询执行中遇到了不必要的暂停。我们的应用程序打开了许多 ResultSets 并从每个 ResultSets 中只获取几行。每个查询选择大约 100k 行,但我们只获取大约 50 行(这足以填满一页)。问题是第一个查询之后的每个查询都包含大约 2 秒的暂停,在此期间驱动程序将前一个 ResultSet 中的所有行加载到临时存储(内存或磁盘)中,因此可以稍后遍历它们。因为我们在最坏的情况下大约有 6 次查询,所以会有大约 10s 的暂停,这使得应用程序对用户没有响应。MSSQL 版本是 2005。

为了消除这种暂停,我们尝试通过 Microsoft JDBC 驱动程序的连接字符串参数启用 MARS(多个活动结果集)(由于缺乏文档,我们尝试了https://sites.google.com/上列出的所有内容站点/sqlconnect/sql2005strings)。连接字符串示例:

jdbc:sqlserver://TESTDBMACHINE;instanceName=S2005;databaseName=SampleDB;MarsConn=yes

但他们都没有解决问题。Microsoft JDBC 驱动程序似乎接受连接字符串中的任何内容 - 如果您将 MarsConn=yes 替换为 PleaseBeFast=yes,MS 驱动程序将忽略该参数并且甚至不记录该事实。我不知道 MARS 是仅用于缓存先前活动结果集中的行的客户端功能,还是服务器功能。我什至不知道如何从服务器端检测给定的连接是否正在使用 MARS。如果您可以对此发表评论,将受到欢迎。

暂停的另一个解决方案是使用可滚动(双向)结果集。这消除了暂停,但使获取时间变慢了 80% 并且更多的网络消耗。我们现在正在考虑实现一个 JDBC 连接包装器,它保留一个实际连接池并自动向不同的“ResultSet free”连接发出查询。但这有点麻烦,因为我们需要在每个连接与其活动的 ResultSet 之间保持链接。此外,它会消耗来自服务器的更多连接,并可能给 DBA 带来麻烦。如果存在活动事务,则此解决方案无济于事,所有查询都必须在同一连接上发出。

您是否知道一些参数、配置、特定 API、链接或技巧可以消除第二次和后续查询执行的暂停?

0 投票
3 回答
2466 浏览

sql-server - 如何使用 JDBC 将表值参数(类数组参数)传递给 Microsoft SQL Server 2008 R2 中的存储过程?

如何使用 Microsoft SQL Server 2008 R2 JDBC 驱动程序将表值参数(类似数组的参数)传递给 Microsoft SQL Server 2008 R2 中的存储过程?jTDS可以吗?

0 投票
1 回答
286 浏览

java - 应用程序的存储过程比 Management Studio 慢

我们有一个存储过程,当从应用程序(Spring - DBCP - jtds)调用时,它在 10 分钟后实际上超时运行,但从 SQL Server Managament Stuido 执行时运行在 30 秒内。有人可以提供有关此问题的线索吗?

0 投票
4 回答
26689 浏览

android - 如何在Android中使用JTDS驱动连接sql server

我是 android 新手。我想使用 JTDS 驱动程序连接 sql server。谁能告诉我..

thnx提前...

0 投票
1 回答
11755 浏览

sql-server - Why is JTDS faster than Microsoft JDBC driver?

we're comparing JTDS and Microsoft SQL Server for a Java EE application running on JBoss and we're finding that JTDS is from 30% to 50% faster, benchmarking the application in a high concurrence scenario and keeping exactly the same HW/SW but changing only the driver in the datasource configuration.

While we've seen a lot of favorable options towards JTDS and so we're thinking to go for it I'm still curious:

  • Why is the JTDS driver so much faster?
  • Why Microsoft never updated its driver to be fast as JTDS?

Comparison was made using the latest JDBC 3.0 version and the latest JTDS version and using a SQL Server 2008 running on a 16 core installation with dedicated SAN.

0 投票
1 回答
1083 浏览

java - JDBC-JTDS 错误?对于日期和时间 (x) 类型的列

当我尝试使用类型和的方法获取列类型时,ResultSetMetaData 我得到 . 对于其他类型,它似乎工作正常。这是一个错误吗?似乎没问题。我正在运行getColumnTypeNamedatetime(x)nvarcharResultSet getString("TYPE_NAME")MSSQL2008

@a_horse_with_no_name

ResultSetMetaData我在执行查询时得到。在那种情况下,我没有任何桌子。这是代码片段