Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 可以从数据库获取数据,但无法从上下文侦听器类将记录更新到数据库_Java_Sql Server_Stored Procedures - Fatal编程技术网

Java 可以从数据库获取数据,但无法从上下文侦听器类将记录更新到数据库

Java 可以从数据库获取数据,但无法从上下文侦听器类将记录更新到数据库,java,sql-server,stored-procedures,Java,Sql Server,Stored Procedures,我创建了上下文侦听器类,在该类中我使用Executor类创建了一个调度程序任务。从这个任务中,我调用数据库。 上下文侦听器类 @WebListener public class WebAppServletListener implements ServletContextListener{ private DailyNotificationSchedular dailySchedular; private ImmediateNotificationSchedular immediateSched

我创建了上下文侦听器类,在该类中我使用Executor类创建了一个调度程序任务。从这个任务中,我调用数据库。 上下文侦听器类

@WebListener
public class WebAppServletListener implements ServletContextListener{
private DailyNotificationSchedular dailySchedular;
private ImmediateNotificationSchedular immediateSchedular;
@Override
public void contextInitialized(ServletContextEvent arg0) {
    System.out.println("Context is started !");
    //dailySchedular = DailyNotificationSchedular.getSchedular();
    //dailySchedular.start();
    immediateSchedular = ImmediateNotificationSchedular.getSchedular();
    immediateSchedular.start();
}
@Override
public void contextDestroyed(ServletContextEvent arg0) {
    dailySchedular.stop();
    immediateSchedular.stop();
}
}
其中start方法如下所示

public void start() {
    System.out.println("daily notification started !");
    System.out.println(this.getProperties().getProperty("dailyrule"));
    try {
        final Runnable dailyTask = new Runnable() {
            public void run() {
                NotificationRuleHandler rh = new NotificationRuleHandler();
                List<Rule> scheduledRules = rh.getAllRules("IMMEDIATE");
                Iterator itr = scheduledRules.iterator();
                while(itr.hasNext()) {
                    rh.processNotificationRule((Rule)itr.next());
                }
            }
        };
        this.scheduler.scheduleAtFixedRate(dailyTask, 0, 15, TimeUnit.MINUTES);// replace time interval from bw properties
    } catch (Exception e) {
        e.printStackTrace();
    }
}
现在使用相同的数据库凭据,我尝试使用SP将记录插入数据库

callableStatementUpdate = connection.prepareCall("{CALL UPDATE_EMAIL_NOTIFICATION_LOG_IMMEDIATE(?,?,?,?,?)}");
int r = callableStatementUpdate.executeUpdate();
现在,当我尝试打印r时,它给出的结果是-1

所以,经过大量调试,我基本上得出结论,我能够从数据库中获取数据,但无法将数据更新到表中。有人能告诉我为什么会这样吗?
同样的事情如果我尝试从任何servlet文件,那么它工作正常

您是否尝试在SQL端执行探查器跟踪?您是否遇到任何异常?您在哪里为SP调用设置了参数值?如果您在SSMS中手动运行更新SP,它是否工作?
callableStatementUpdate = connection.prepareCall("{CALL UPDATE_EMAIL_NOTIFICATION_LOG_IMMEDIATE(?,?,?,?,?)}");
int r = callableStatementUpdate.executeUpdate();