繁体   English   中英

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

[英]MSSQL execute doesn't throw an error in java

我正在尝试通过java对mssql数据库执行字符串,如果sql代码正确或如果我不使用EXECUTE,它就可以正常工作。 但是,如果EXECUTE字符串中的sql代码错误,则不会显示任何错误。

尽管两个示例在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

如果我正确地阅读了此内容,那么您将忽略返回值。 该代码不知道它是否成功执行。 您的“有效”示例仅引发原始错误,但在“无效”结果中将忽略该错误。 尝试

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

参考: http : //technet.microsoft.com/zh-cn/library/ms188332.aspx (请参阅D和E节)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM