当前位置: 首页 > 知识库问答 >
问题:

Java JDBC MySQL异常:“ResultSet关闭后不允许操作”,网页读取[duplicate]

席俊达
2023-03-14

我正在使用MySQL连接器获取URL以查找网页上的值。

我得到了上述信息,我不知道为什么。它插入来自rs1的第一条记录,但我不确定它为什么要关闭它。

下面是我的代码

    String strSQL = "SELECT * FROM element_info;";
    String sElementID = "";
    String sSymbol = "";
    URL urlChartLink;
    URLConnection urlconn;
    String sChartLink = "";
    String sCurrentPrice = "";
    String FindValue = "last_last";

    try {

        Class.forName(driver).newInstance();
        Connection mysqlconn = DriverManager.getConnection(url + dbName, userName, password);
        Statement st1 = mysqlconn.createStatement();
        ResultSet rs1 = st1.executeQuery(strSQL);

        while (rs1.next()) {
            // Get all of the elements
            // Retrieve the ElementID
            sElementID = rs1.getString(1);
            // Retrieve the Symbol
            sSymbol = rs1.getString(2);
            // Retrieve the Chartlink
            sChartLink = rs1.getString(3);
            if (sChartLink == "") {
                break;
            }

            try {

                urlChartLink = new URL(sChartLink);
                urlconn = urlChartLink.openConnection();
                urlconn.addRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
                BufferedReader in = new BufferedReader(new InputStreamReader(urlconn.getInputStream(), "UTF-8"));
                String currentLine;

                while ((currentLine = in.readLine()) != null) {
                    // See if the value is on this record
                    int pos1 = currentLine.indexOf(FindValue);
                    int pos2 = currentLine.indexOf("</span>");
                    // pos1 = 66
                    if (pos1 > 0) {
                        pos1 = pos1 + 21;
                        pos2 = pos2 - 1;
                        // System.out.print("pos1 = " + pos1 + "\n");
                        // System.out.print("pos2 = " + pos2 + "\n");

                        sCurrentPrice = currentLine.substring(pos1, pos2);
                        // System.out.print("sCurrentPrice = " + sCurrentPrice + "\n");

                        // Import into the marketprices
                        strSQL = "INSERT INTO marketprices"
                                + "(ElementID,Symbol,PullDatetime,Price) VALUES (" + "'" + sElementID + "','"
                                + sSymbol + "','" + sToday + "','" + sCurrentPrice + "')";

                        int val = st1.executeUpdate(strSQL);

                        if (val == 1)
                            System.out.print("Successfully inserted from " + sChartLink + "\n");
                        break;
                    }
                }                   
                in.close();
            } catch (IOException e) {
                System.out.print("Error getting ChartLink website: " + e.getMessage() + "\n");
                break;
            }
        }           
    } catch (Exception e) {
        System.out.print("Error: " + e.getMessage() + "\n");
        e.printStackTrace();
    }

共有1个答案

谯嘉胜
2023-03-14

您正在尝试使用已在使用的语句对象进行写入,因为您仍在从该语句对象读取现有的结果集。您需要为代码的更新部分创建一个新的语句对象:

strSQL = "INSERT INTO marketprices"+ "(ElementID,Symbol,PullDatetime,Price) VALUES (" + "'" + sElementID + "','"+ sSymbol + "','" + sToday + "','" + sCurrentPrice + "')";
Connection mysqlconn2 = DriverManager.getConnection(url + dbName, userName, password);
Statement st2 = mysqlconn.createStatement();
int val = st2.executeUpdate(strSQL);
 类似资料:
  • 问题内容: 我已经为此工作了将近一天半,但似乎无法解决此错误。我不知道为什么ResultSet被关闭。也许有些人可以帮助我。 MySQL数据库: MySQLHandler MySQL捐赠 异常发生在这里:在MySQLDonation的while循环中,实际的堆栈跟踪是这样的: 有了这些信息,我可以说这 确实 有效,我得到了我的信息,但不是游戏中的内容,而是重复出现的内容,就像用户从未从查询中删除一

  • 问题内容: 我被错误卡住了,这里的第42行是,请帮我解决这个问题,我在这个问题上待了几个小时。 这是我的代码: 问题答案: 一个对象只能有一个active对象,因此在执行时,第一个ResultSet()被关闭。 创建两个对象,一个用于,另一个用于。 引用以下内容的javadoc : 默认情况下,每个对象只能同时打开一个对象。因此,如果一个对象的读取与另一对象的读取交错,则每个对象必须已由不同的对象

  • 问题内容: 我被错误卡住了,这里的第42行是,请帮我解决这个问题,我在这里待了几个小时。 这是我的代码: 问题答案: 一个对象只能具有一个active对象,因此在执行时,第一个ResultSet()被关闭。 创建两个对象,一个用于,另一个用于。 引用以下内容的javadoc : 默认情况下,每个对象只能同时打开一个对象。因此,如果一个对象的读取与另一个对象的读取是交错的,则每个对象必须已由不同的对

  • 下面是相关的代码部分:Server. Proxy.update_allLogOut:(第65行是时括号) 服务器服务器: 主要: 我必须指出,它99%的运行时间都没有例外。。但有几次我遇到了这个例外,我不明白为什么会发生这种情况。有什么想法吗?很明显,有些地方做错了,但这里所有类似的主题都没有给出这个问题的答案。。。

  • 我正在将MySQL与Java结合使用,试图制作shoppingcartDB,并试图删除从订购到现在已经过了30天的元组。 但是编译器说: 我如何解决这个问题? 代码: 抛出异常的代码行是: stmt。executeUpdate(“从篮子中删除,其中orderdate=““Odate”;”);

  • 我已经为此工作了将近一天半,我似乎无法解决这个错误。我不知道为什么结果集被关闭。也许你们中的一些人可以帮我。 MySQL数据库: MySQLHandler MySQLDonation 异常发生在这里:在MySQLDonation和实际堆栈跟踪的同时循环中: 有了这些信息,让我说这确实有效,我得到了我的信息和游戏中没有的东西,但它会重复,就像用户永远不会从查询中删除,所以它会给他们无限的奖励。如果您