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