2016-12-01 3 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 

자바 코드 :

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

대신'CallableStatement'의 객체 Statement''단순한를 사용해보십시오. –

답변

0

GO는 따라서 대답은,자는 PreparedStatements에서 허용되지 않습니다 :

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