问题标签 [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 投票
1 回答
830 浏览

sql - 当我准备好的语句包含 ROW_NUMBER() 时,JDBC-driver / SQL Server 会一直重新编译它们

我注意到包含 ROW_NUMER() 代码的准备好的语句经常被重新编译,尽管它们的 SQL 代码没有改变。

(来自《Inside Microsoft SQL Server 2008: T-SQL Querying》一书中的示例):

我正在使用最新版本的 jTDS JDBC 驱动程序 (1.2.3) 并注意到 SQL Server 2005 和 2008 都存在问题。

有人知道发生了什么吗?为什么它会重新编译语句,尽管它们的代码没有改变?对于我的一个查询,重新编译大约需要 1200 毫秒,与低至 31 毫秒的执行时间相比,这是很多的。

0 投票
3 回答
4303 浏览

jdbc - 将 Sybase ASE 12.5.4 与带有 JRuby 的 jTDS 驱动程序一起使用

问题

我正在尝试构建一个小的 ruby​​ 脚本 - 每天使用 jruby 运行一次 - 以连接到 Sybase ASE 12.5.4 数据库并执行复杂的查询。

最终,我打算对数据进行一些处理,并将新数据插入 MySQL 表中,以便在 Rails 应用程序中使用。

环境

  • jruby v1.4.0
  • java v1.6.0_15
  • 在 Ubuntu 业力

JRuby 安装的 Gems

  • activerecord-jdbc-适配器 (0.9.1)
  • 活动记录-2.3.4

Jruby 库目录

  • jtds-1.2.5

询问

代码片段

我可以确认这连接到数据库。虽然我只是从数据库表中选择 10 行时遇到问题。

生产

对于执行方法:

对于select_rows方法:

该错误表明我不应该返回结果集,但我使用的方法无关紧要,执行,select_rows 等都不起作用。

关于查询的另一件事。我的原始查询相当复杂,我标记变量、删除临时表并创建临时表以及填充和从中选择。使用 Squirrel SQL,我可以执行一次并获得结果。使用 DBI 我无法在一次执行中执行此操作,有谁知道我是否可以只执行一次整个操作还是必须将其拆分?

请问有人可以给我任何帮助吗?我是否正确使用了 jTDS?提前谢谢了。

0 投票
8 回答
3944 浏览

java - 通过 Java 运行的存储过程比直接在数据库上运行慢 30%

我正在使用 Java 1.6、JTDS 1.2.2(也只是尝试 1.2.4 无济于事)和 SQL Server 2005 来创建 CallableStatement 来运行存储过程(不带参数)。我看到运行相同存储过程的 Java 包装器比使用 SQL Server Management Studio 慢 30%。我已经运行了 MS SQL 分析器,两个进程之间的 I/O 差别不大,所以我认为这与查询计划缓存无关。

存储过程不接受任何参数并且不返回任何数据。它使用服务器端游标来计算填充表所需的值。

我看不出从 Java 调用存储过程应该如何增加 30% 的开销,当然它只是一个到数据库的管道,SQL 被发送下来,然后数据库执行它......数据库可以给 Java应用不同的查询计划??

我已经发布到MSDN 论坛和 sourceforge JTDS 论坛(主题:“在 JTDS 中存储 proc 比直接在 DB 中慢”)我想知道是否有人对为什么会发生这种情况有任何建议?

提前致谢,

-詹姆士

(注意不要害怕,一旦我找到解决方案,我会在这里整理我在其他论坛上得到的任何答案)

Java代码片段:

我运行了 sql profiler,发现如下:

Java 应用程序:CPU:466,514 读取:142,478,387 写入:284,078 持续时间:983,796

SSMS:CPU:466,973 读取:142,440,401 写入:280,244 持续时间:769,851

(都在分析之前运行 DBCC DROPCLEANBUFFERS,并且都产生正确的行数)

所以我的结论是它们都执行相同的读取和写入,只是它们执行的方式不同,你们怎么看?

事实证明,不同客户端的查询计划有很大不同(Java 客户端在插入期间更新索引,而不是在更快的 SQL 客户端中,此外,它执行连接的方式也不同(嵌套循环 Vs.收集流,嵌套循环与索引扫描,啊!))。为什么会这样,我还不知道(当我找到它的底部时我会重新发布)

结语

我无法让它正常工作。我尝试同质化Java 和 Mgmt studio 客户端之间的连接属性(等)arithabortansi_nulls最终,两个不同的客户端具有非常相似的查询/执行计划(但仍然具有不同的实际 plan_id)。我在 MSDN SQL Server 论坛上发布了我发现的摘要,因为我发现不仅在 JDBC 客户端和管理工作室之间,而且在微软自己的命令行客户端 SQLCMD 之间也存在不同的性能,我还检查了一些更激进的事情,比如网络流量太,或者将存储过程包装在另一个存储过程中,只是为了笑。

我有一种感觉,问题出在游标执行方式的某个地方,它以某种方式导致 Java 进程被挂起,但是为什么不同的客户端应该在没有其他东西运行的情况下产生这种不同的锁定/等待行为并且相同的执行计划在运行中有点超出我的技能(我不是 DBA!)。

结果,我决定 4 天足够任何人的时间浪费在这样的事情上,所以我会勉强围绕它进行编码(如果我说实话,存储过程需要重新编码以增加增量而不是重新编码) - 无论如何每周计算所有数据),并将这个记录下来以体验。我会留下这个问题,非常感谢所有把帽子放在戒指上的人,这一切都很有用,如果有人想出更多的东西,我很想听听更多的选择......如果有人找到这篇文章是在他们自己的环境中看到这种行为的结果,然后希望这里有一些你可以自己尝试的指示,并希望比我们更深入地了解。

我现在准备好我的周末了!

-詹姆士

0 投票
1 回答
2174 浏览

java - 是否可以在 sql server 上使用 jdbc 获取查询计划?

我正在使用 JTDS 驱动程序,我想确保我的 java 客户端接收到与我在 Mgmt Studio 中执行 SQL 时相同的查询计划,有没有办法获取查询计划(最好是 xml 格式)?

基本上,我想要相同的格式输出

在管理工作室。有任何想法吗?

获取 session_id 计划的一些代码

0 投票
5 回答
212767 浏览

java - 创建 jTDS 连接字符串

我的 sql 服务器实例名称是 MYPC\SQLEXPRESS,我正在尝试创建一个 jTDS 连接字符串来连接到数据库“博客”。任何人都可以帮我完成吗?

我正在尝试这样做:

我明白了:

0 投票
2 回答
1435 浏览

sql-server-2005 - 在 SQL Server 2005 和 Hibernate 中使用索引时出现问题

我对 Hibernate 生成的不使用索引的查询有疑问。使用 JTDS 从 Java 访问数据库,服务器版本是 SQL Server 2005,最新的服务包。

该字段可以为空,并且是一个外键,在某些特定情况下,可能完全为空,列通过非聚集索引建立索引,但当列完全为空时从不使用索引,从而创建大量全表扫描和性能问题。

也可以使用带有以下 SQL 代码的标准查询分析器来验证这种情况:

创建表和索引

使用 newid 函数填充一些随机数据

此查询执行全表扫描

如果我使用“and DATANULL IS NOT NULL”完成查询,则查询现在使用索引。

需要帮助:

  • 如何强制 JTDS/Hibernate 组合使用索引(默认情况下 sendStringParametersAsUnicode 已设置为 false)?
  • 有没有办法为所有使用可空字段的休眠查询附加“并且列不为空”?
  • 关于这种行为的任何解释?

问候马西莫

0 投票
1 回答
1748 浏览

hibernate - 为什么 JPA、Hibernate 和 jTDS 总是将 varchar(8000) 用于 String 列?

我使用 JPA (Hibernate) 和 jTDS 作为我的 jdbc 驱动程序。每当我的实体列的数据类型是字符串时,创建的准备好的语句varchar(8000)就用作其参数。例如,我已经尝试@Column(length=50)在我的映射中使用它,但它似乎被忽略了。

如果我sendStringParametersAsUnicode在 jTDS 连接中设置,它会nvarchar(4000)改为使用,但从不尊重我在实体中定义的长度。这有什么原因吗?

0 投票
1 回答
5375 浏览

sybase - “无效的 SQL 语句或 JDBC 转义,未找到终止 '}'。” 使用 jTDS 和 Sybase

我正在通过 ibatis 调用存储过程。使用 jconn2.jar (5.5) 时,它有效,并且已经有效。当我将它换成 jtds jar (1.2.5) 时,我得到一个异常“无效的 SQL 语句或 JDBC 转义,未找到终止 '}'”。

为了提高透明度,我将 Spring 与 DBCP 一起使用。显然 jTDS 中对 SQL 代码的解析不被喜欢,在 jconn2 中被接受。这个项目早于我们很多人,而且我已经很多年没有使用 Sybase。

数据中的离群字符是“-”、“:”和“。”

我是否需要在存储过程调用语句中转义我的参数才能解决此问题?jconn2 是否有没有为 jTDS 设置的默认设置?

谢谢。

0 投票
2 回答
4892 浏览

sql-server - 如何使用 activerecord、JDBC、JTDS 和 Integrated Security 连接到 SQL Server

根据上述,我尝试过:

..和其他各种组合。

每次我得到:

如果我在没有用户信息的情况下尝试:

我得到这个回应:

有小费吗?谢谢,

  • 活动记录(2.3.5)
  • activerecord-jdbc-适配器 (0.9.6)
  • activerecord-jdbcmssql-适配器 (0.9.6)
  • jdbc-jtds (1.2.5)
  • jruby 1.4.0 (ruby 1.8.7 patchlevel 174) (2009-11-02 69fbfa3) (Java HotSpot(TM) Client VM 1.6.0_18) [x86-java]
0 投票
2 回答
3501 浏览

java - 带有 CallableStatement.getResultSet() 的 NullPointerException

我在 SQL Server 2005 中有一个存储过程,如下所示(简化)

当我从 SQL Server Management Studio 运行这个过程时,一切正常。但是,当我从 Java 程序调用相同的 proc 时,使用类似:

我不明白为什么返回的第一个结果集是 NULL。谁可以给我解释一下这个?

作为一种解决方法,如果我检查 cs.getMoreResults() 并且如果为真,请尝试另一个 getResultSet() - 这次它返回正确的结果集。

请问有什么指点吗?(如果重要的话,我正在使用 JTDS 驱动程序)

谢谢,拉吉