2016-12-01 90 views
0

同志們,我需要幫助!我無法使用JTDS驅動程序版本1.3.1執行SQL Server腳本。下面的細節。無法使用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][email protected]) 
UPDATE rdf.SimplePropertyTypes 
SET Name = @Name 
, Caption = @Caption 
, [Description] = @Description 
WHERE [Guid][email protected] 
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

需要幫助!

+0

嘗試使用簡單'Statement'對象,而不是一個'CallableStatement'。 –

回答

0

GO未用預處理允許的,因此,回答是:

try (final Connection connection = sourceDataSource.getConnection(); 
      final PreparedStatement preparedStatement = connection.prepareStatement(sql.replaceAll(" GO\n", " "))) { 
    preparedStatement.executeUpdate(); 
}