MSSQL执行不会在java中引发错误

时间:2013-12-23 10:35:08

标签: java sql sql-server

我正在尝试通过java对mssql数据库执行一个String,如果sql-code正确或者我没有使用EXECUTE,它可以正常工作。 但是如果EXECUTE-string中的sql-code错误,则不会显示任何错误。

虽然两个示例在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

任何想法如何解决?

编辑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 个答案:

答案 0 :(得分:0)

如果我正确读取此内容,则忽略返回值。代码不知道它是否成功执行。您的“工作”示例只会抛出原始错误,但在“不工作”结果中会被忽略。 尝试

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部分)