当前位置: 首页 > 知识库问答 >
问题:

无法使用JTDS 1.3.1执行SQL Server脚本

尹凌龙
2023-03-14

同志们,我需要帮助!我无法使用JTDS驱动程序版本1.3.1执行SQL Server脚本。详情如下。

我试图删除一些SQL脚本行,但没有任何帮助。

SQL脚本:

USE [SomeScheme]
    GO
    DECLARE @ID int
    , @Guid nvarchar(50)
    , @Name nvarchar(250)
    , @Caption nvarchar(250)
    , @Description nvarchar(max)

    SET @Description = NULL;

SET @Guid = 'EAID_4076F221_3910_4480_B49A_09621E214249';
SET @Name = 'datetime';
SET @Caption = 'datetime';
IF EXISTS(SELECT [Guid] FROM rdf.SimplePropertyTypes WHERE [Guid] = @Guid) 
BEGIN
SET @ID = (SELECT ID FROM rdf.SimplePropertyTypes WHERE [Guid]=@Guid)
UPDATE rdf.SimplePropertyTypes
SET Name = @Name
, Caption = @Caption
, [Description] = @Description
WHERE [Guid]=@Guid
END
ELSE
BEGIN
SET @ID = ISNULL((SELECT MAX(ID) FROM rdf.SimplePropertyTypes),0) + 1000
INSERT INTO rdf.SimplePropertyTypes(ID, [Guid], Name, Caption, [Description]) VALUES
(@ID, @Guid, @Name, @Caption, @Description);
END
SET @Description = NULL

Java代码:

try (final Connection connection = sourceDataSource.getConnection();
     final CallableStatement callableStatement = connection.prepareCall(sql)) {
    callableStatement.executeUpdate();
}

异常堆栈跟踪:

Caused by: java.sql.SQLException: Invalid JDBC escape syntax at line position 68 '=' character expected.
    at net.sourceforge.jtds.jdbc.SQLParser.mustbe(SQLParser.java:412)
    at net.sourceforge.jtds.jdbc.SQLParser.callEscape(SQLParser.java:554)
    at net.sourceforge.jtds.jdbc.SQLParser.escape(SQLParser.java:1009)
    at net.sourceforge.jtds.jdbc.SQLParser.parse(SQLParser.java:1178)
    at net.sourceforge.jtds.jdbc.SQLParser.parse(SQLParser.java:165)
    at net.sourceforge.jtds.jdbc.JtdsPreparedStatement.<init>(JtdsPreparedStatement.java:111)
    at net.sourceforge.jtds.jdbc.JtdsCallableStatement.<init>(JtdsCallableStatement.java:70)
    at net.sourceforge.jtds.jdbc.JtdsConnection.prepareCall(JtdsConnection.java:2426)
    at net.sourceforge.jtds.jdbc.JtdsConnection.prepareCall(JtdsConnection.java:2412)
    at org.apache.commons.dbcp.DelegatingConnection.prepareCall(DelegatingConnection.java:308)
    at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.prepareCall(PoolingDataSource.java:303)

驱动程序:JTDS 1.3.1

需要帮助!

共有1个答案

江高飞
2023-03-14

GO在precedStatements中是不允许的,因此答案是:

try (final Connection connection = sourceDataSource.getConnection();
             final PreparedStatement preparedStatement = connection.prepareStatement(sql.replaceAll(" GO\n", " "))) {
    preparedStatement.executeUpdate();
}
 类似资料:
  • 我在尝试编译 eXo 平台时遇到麻烦。 错误消息是: < code >原因:java.io.IOException:无法运行程序“/exo/platform-public-distributions-develop/PLF-community-Tomcat-standalone/target/platform-community-5.0 . x-SNAPSHOT/platform-communit

  • 我已经创建了一个使用命令行执行cucumber测试的小项目,当我在maven surefire插件中指定我的runner类路径时,我可以使用命令行执行cucumber测试(这里所有的场景都被选中),但当我评论并尝试使用标记选项运行时,我成功地获得了构建,但没有执行任何操作。命令使用mvn测试-Dcucumber。选项=“--tags@Flipkart” 回答:对我来说-Dcucumber。opti

  • 我试图使用ansible playbook安装redislabs和jmter,但无法使用playbook执行脚本。请找到我的剧本和错误以及。 注意:以下是jmeter的错误,redislabs的错误也是相同的。就像没有这样的文件或目录 > 主机:本地主机 用户:ansibleadm 文件:path=/home/ansibleadm/jmeter state=directory mode=0700

  • 我试图将selenium test之一迁移到空手道,同时这样做我正在使用在留档中定义的script()方法,该方法在空手道中用于评估给定字符串为浏览器内的JavaScript,但我得到了这个 还分享我的功能文件,其中得到失败: 甚至我也试着在脚本中调用下面的语句,但仍然得到相同的错误 我正在使用gatling版本

  • 我有SunOs 5.10 unix服务器,在那里我编写了一个脚本来执行java文件,如下所示 在这个脚本中,有很多代码,其中包括日志文件,以及在导出JAVA HOME之前添加的其他二进制文件类路径。但当我执行时,我得到以下错误 我更改了很多java版本,但都出现了相同的错误

  • 我想在macos上使用apache2从PHP文件执行Python脚本。我能够执行简单的python脚本,如: 从PHP: 巨蟒 输出是: 但当我尝试导入以下包时: 我得到: 我的问题是,有人知道: 1–我如何使这些(以及任何其他)软件包工作? 2–shell_exec当前正在执行python2。如何添加Python 3?(如果我编写python3而不是python将无法工作)