2013-12-23 80 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)