Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.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 在循环中执行SQL查询_Java_Sql_Resultset - Fatal编程技术网

Java 在循环中执行SQL查询

Java 在循环中执行SQL查询,java,sql,resultset,Java,Sql,Resultset,我有这种情况。我将在服务器中触发一个作业,一旦该作业被触发,将在作业表中创建一个条目,执行状态代码为1。我需要等待一段时间,比如5分钟,然后重新检查执行状态代码值。一旦值更改为2,我就需要继续 我正在使用现有连接连接到数据库。我需要执行SQL,如果SQL输出正在进行,我需要等待一段时间,然后再次执行该语句。执行此操作直到SQL输出成功,然后继续等待 下面是我尝试过的代码 Thread t = new Thread(); java.sql.Connection conn_javaComp = (j

我有这种情况。我将在服务器中触发一个作业,一旦该作业被触发,将在作业表中创建一个条目,执行状态代码为1。我需要等待一段时间,比如5分钟,然后重新检查执行状态代码值。一旦值更改为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();
    }
}

我得到的输出是“正在进行”。即使在我更改数据库中的值之后,循环仍在进行中。我不知道我哪里做错了。有什么建议吗?

您正在循环内创建一个新语句和一个新结果集,因此,它们应该在循环内关闭。我认为您的连接被多个语句和结果集破坏,而没有关闭它们。请尝试关闭它们,看看是否有效。

您正在循环中创建一个新语句和一个新结果集,因此,它们应该在循环中关闭。我认为您的连接被多个语句和结果集破坏,而没有关闭它们。请尝试关闭它们并查看是否有效。

您正在查看的数据将被缓存


尝试关闭并重新打开数据库连接。如果使用数据库池,这可能还不够好。

您看到的数据将被缓存


尝试关闭并重新打开数据库连接。如果您使用数据库池,这可能还不够好。

我可以预见您的代码会出现很多问题。这一次,大多数DBMS要么锁定行,直到您提交/关闭连接,要么给您一个数据快照,因此您看不到更新的值,或者应该更新它的事务不会通过。尝试在每次循环迭代中设置或关闭/重新打开事务


我还怀疑这是否是一个好的代码设计,因为您正在进行“轮询”。考虑一下是否可以找到其他通知事件的方法。

有很多事情我可以预见到你的代码出错了。这一次,大多数DBMS要么锁定行,直到您提交/关闭连接,要么给您一个数据快照,因此您看不到更新的值,或者应该更新它的事务不会通过。尝试在每次循环迭代中设置或关闭/重新打开事务

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));

我还怀疑这是否是一个好的代码设计,因为您正在进行“轮询”。考虑是否可以找到其他通知事件的方法。

我需要在循环中执行SQL并获取状态。我需要执行循环中的SQL并获取状态。
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));