2013-12-23 81 views
2

我想通過java執行一個字符串對一個mssql數據庫,它工作正常,如果sql-code是正確的,或者如果我不使用EXECUTE。 但是,如果EXECUTE字符串中的sql代碼錯誤,它不會顯示任何錯誤。MSSQL執行不會在java中拋出錯誤

雖然這兩個實施例以MSSQL管理工作室工作正常(兩者都示出了預期的錯誤)

一個簡單的例子是:

WORKING(示出了錯誤):

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 

任何想法如何解決這個問題?

編輯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驅動程序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)