【问题标题】:Getting print messages from sqlserver to java application从 sqlserver 获取打印消息到 java 应用程序
【发布时间】:2015-07-03 23:33:16
【问题描述】:

我有一个打印简单字符串的存储过程:

create proc proc1  
as  
print 'Hello World !'

我有一个 android 应用程序,它使用 servlet(用 Java 编写)连接到 SQL 服务器 数据库。下一个代码在 servlet 内:

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con1 = DriverManager.getConnection("Jdbc:Odbc:abc");
CallableStatement cstmt=con1.prepareCall("{call proc1}");
cstmt.execute();

它工作正常。该程序正在激活,但现在,我想要 获取打印消息“Hello world!”但下面的代码没有 工作,并且 SQLWarning 总是为空:

SQLWarning warning = cstmt.getWarnings();
while (warning != null)
{
   System.out.println(warning.getMessage());
   warning = warning.getNextWarning();
}    

我的问题是如何获得论文打印消息? 附言 使用 raiserror 代替 print 效果不佳。 我已经知道输出参数的选项(我研究了这个主题将近一周)。征得您的同意,我想要求另一种选择。

【问题讨论】:

    标签: java android sql-server servlets


    【解决方案1】:

    我不确定如何在 Java 中实现它。但是,正如this article(不是公认的答案)暗示打印的工作方式不同并且不会产生“警告”。您可以考虑改用 raiserror 。同样,这个Blog article 描述了如何使用SqlInfoMessageEventHandler 来获取信息消息。

    【讨论】:

    • 嗨,谢谢,但我已经知道如何在 C# 中执行此操作。 SqlInfoMessageEventHandler 在 java 中不存在。关于raiserror,我已经试过了。没用。 SQLWarning 对象一直为 null。
    • 根据 SQL Server 文档,使用严重级别低于 10 的 raiserror 被视为警告。当您测试 raiserror 时,您是否设置了适当的严重性级别?
    • 好吧,我现在用第 6 级试了一下:它仍然为空。顺便说一句,16 级有一个我不想要的异常。
    • 正如所说,严重性大于 10 会导致异常,而严重性较低则被视为警告。恐怕 JDBC 没有实现 SQL Server 的这个功能,或者 Java 与 ODBC 驱动程序的集成没有提供这个功能。另一种方法是实现输出到日志表并查询表内容。
    • 是的,我真的希望我不必使用输出参数,因为我有很多存储过程,而且每个存储过程调用的其他存储过程很少,所以这意味着在每一行存储过程中包含另一个程序的“Exec”,我将不得不传递一个输出参数。对我来说真的很奇怪,不存在获取打印消息之类的基本功能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-04
    • 2016-03-16
    • 2018-06-04
    • 1970-01-01
    相关资源
    最近更新 更多