2013-12-23 2 views
2

Я пытаюсь ВЫПОЛНИТЬ String для базы данных mssql через java, она отлично работает, если SQL-код правильный или если я не использую EXECUTE. Но если код sql в строке EXECUTE неверен, он не показывает никаких ошибок.Выполнение MSSQL не вызывает ошибку в java

Хотя оба примера работают хорошо в студии управления MSSQL (как показывают ожидаемую ошибку)

Простой пример был бы:.

РАБОЧАЯ (показывает ошибку):

declare @testvar varchar(255); 
BEGIN 
create table dbo.test1 (testid numeric(10,2)); 
ALTER TABLE dbo.test1 ALTER COLUMN testid numeric(15,299); 
END 

не работает (не показывает никаких ошибок):

declare @testvar varchar(255); 
BEGIN 
create table dbo.test1 (testid numeric(10,2)); 
SELECT @testvar = 'ALTER TABLE dbo.test1 ALTER COLUMN testid numeric(15,299);' 
EXECUTE (@testvar); 
END 

Любые идеи, как это исправить?

Edit 1: (простой пример кода Java, но достаточно, чтобы показать это поведение)

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.SQLException; 
import java.sql.Statement; 

public class QuickSqlExecuteExample { 
public static Connection getConnection(String dbcon) throws SQLException { 
    Connection conn = null; 
    conn = DriverManager.getConnection(dbcon); 
    conn.setAutoCommit(true); 
    return conn; 
} 

public static void main(String[] args) throws SQLException { 
     String dbcon="jdbc:sqlserver://[HOST]:[PORT];databaseName=[DBNAME];user=[USER];password=[PASS];"; 
     Connection con = getConnection(dbcon); 
     String qryString = 
       "declare @testvar varchar(255);" 
       +"\nBEGIN" 
       +"\n create table dbo.test1 (testid numeric(10,2));" 
       +"\n ALTER TABLE dbo.test1 ALTER COLUMN testid numeric(15,299)" 
       //+"\n SELECT @testvar = 'ALTER TABLE dbo.test1 ALTER COLUMN testid numeric(15,299);';" 
       //+"\n EXECUTE (@testvar);" 
       +"\nEND"; 
     Statement select = con.createStatement(); 
     select.execute(qryString); 
} 
} 

Пробовал драйвера: Microsoft SQL Server JDBC Driver 2.0.1803.100/4.0.2206.100

+1

Вы, вероятно, нужно, чтобы показать код Java, который выполняет оператор тоже. И какой драйвер вы используете? –

ответ

0

Если я m читая это правильно, вы игнорируете возвращаемое значение. Код не знает, успешно ли он выполнен. Ваш «рабочий» пример просто выдает необработанную ошибку, но в результате «Не работает» он игнорируется. Попробуйте

DECLARE @retstat int; 
EXECUTE @retstat = ALTER TABLE dbo.test1 ALTER COLUMN testid numeric(15,299); 

Ссылка: http://technet.microsoft.com/en-us/library/ms188332.aspx (смотрите раздел D и E)

Смежные вопросы