我有这种情况。我将在服务器中触发一个作业,一旦触发作业,就会在Execution_status_code为1的情况下将一个条目放入作业表中。我需要等待一段时间说5分钟并重新检查Execution_status_code值。一旦值变为2,我需要继续进行。
我正在使用现有连接来连接数据库。我需要执行SQL,如果SQL输出正在进行中,我需要等待一段时间然后再执行该语句。这样做直到SQL输出成功,直到等待为止。
以下是我尝试的代码。
Thread t = new Thread();
java.sql.Connection conn_javaComp = (java.sql.Connection)globalMap.get("conn_tNetezzaConnection_1");
java.sql.Statement st = null;
java.sql.ResultSet rs = null;
String check = null;
String dbquery_javaComp = "select case when EXECUTION_STATUS_CODE = 2 then 'Success' when EXECUTION_STATUS_CODE = 1 then 'In progress' else 'Failure' end as EXECUTION_STATUS_CODE from JOB_BKUP_NCR where JOB_TYPE_CODE="+context.JobTypeCode+" and Load_id = (select max(load_id) from JOB_BKUP_NCR where job_type_code="+context.JobTypeCode+") and START_DATETIME = (select max(START_DATETIME) from JOB_BKUP_NCR where job_type_Code="+context.JobTypeCode+")";
try
{
do
{
st = conn_javaComp.createStatement();
rs = st.executeQuery(dbquery_javaComp);
if(rs.next())
{
check = rs.getString(1);
System.out.println(check);
if (check.equalsIgnoreCase("In Progress"))
{
t.sleep(1000);
System.out.println("thread executed1");
System.out.println(dbquery_javaComp);
System.out.println(check);
}
}
else {
System.out.println(" No data found");
}
}while (!"Success".equals(check));
}
catch (Exception e) {
e.printStackTrace();
} finally {
try {
if( rs != null)
rs.close();
if( st!= null)
st.close();
}
catch (Exception e1) {
e1.printStackTrace();
}
}
我得到的输出是'进行中'。即使在我更改数据库中的值之后,循环仍在进行中。我不确定我在哪里做错了。有什么建议吗?
答案 0 :(得分:2)
您正在循环中创建一个新语句和一个新结果集,因此,它们应该在循环内部关闭。我认为您的连接已损坏多个语句和结果集而不关闭它们。请尝试关闭它们,看看是否有效。
答案 1 :(得分:1)
将缓存您seeing
的数据。
尝试关闭并重新打开数据库连接。如果您使用数据库池,这甚至可能不够好。
答案 2 :(得分:0)
我可以预见你的代码会出现很多问题。一旦大多数DBMS将锁定行,直到你提交/关闭连接或给你一个数据的快照,因此你不会看到更新的值或应该更新它的事务不会经过。尝试按循环迭代编译或关闭/重新打开事务。
我还怀疑这是一个很好的代码设计,因为你正在做"轮询"。考虑一下您是否可以找到其他方法来获得该事件的通知。
答案 3 :(得分:0)
try
{
//declare here your statement and resultset
st = conn_javaComp.createStatement();
rs = st.executeQuery(dbquery_javaComp);
do
{
if(rs.next())
{
check = rs.getString(1);
System.out.println(check);
if (check.equalsIgnoreCase("In Progress"))
{
t.sleep(1000);
System.out.println("thread executed1");
System.out.println(dbquery_javaComp);
System.out.println(check);
}
}
else {
System.out.println(" No data found");
}
}while (!"Success".equals(check));