首页 > 解决方案 > ResultSet 已关闭,仅打印第一个“SUBKATEGORI”

问题描述

我运行代码并继续关闭结果集,循环有问题吗?从 for() 中获取的字符串也有多个“SUBKATEGORIER”。请帮助我,我是 Java 新手。

Object[] valt = jList1.getSelectedValues();

for (Object ettVal : valt) {
    String enSuperkategori = ettVal.toString();
    System.out.println(enSuperkategori);

    try {
        Statement stmt2 = connection.createStatement();
        ResultSet rs2 = stmt2.executeQuery("SELECT SUBKATEGORIID FROM 
SUBKATEGORI JOIN SUPERKATEGORI ON SUPERKATEGORI.SUPERKATEGORIID = 
SUBKATEGORI.SUPERKATEGORI WHERE SUPERKATEGORI.SKNAMN ='" + enSuperkategori 
+"'");

        while(rs2.next());
        {
        PreparedStatement ps2 = connection.prepareStatement("INSERT 
INTO ANVANDARE_SUBKATEGORI (ANVANDARE,SUBKATEGORI) VALUES(?,?)");
        ps2.setString(1, angivetAnv);
        ps2.setInt(2, rs2.getInt("SUBKATEGORIID"));
        System.out.println(rs2.getInt("SUBKATEGORIID"));
        ps2.executeUpdate();
        }

    } catch (SQLException ex) {
        System.out.println(ex.getMessage());
    }
}

标签: javanetbeans

解决方案


我不知道错误的确切原因,但我的猜测是,一旦您运行内部插入,您的第一个结果集就会关闭。好消息是您可以使用以下单个查询运行整个插入:

INSERT INTO ANVANDARE_SUBKATEGORI (ANVANDARE, SUBKATEGORI)
SELECT SUBKATEGORIID, SUBKATEGORIID
FROM SUBKATEGORI s
INNER JOIN SUPERKATEGORI sp
    ON sp.SUPERKATEGORIID = s.SUPERKATEGORI
WHERE sp.SKNAMN = ?

您的相关 Java 代码:

String sql = "INSERT INTO ANVANDARE_SUBKATEGORI (ANVANDARE, SUBKATEGORI) ";
sql += "SELECT SUBKATEGORIID, SUBKATEGORIID ";
sql += "FROM SUBKATEGORI s ";
sql += "INNER JOIN SUPERKATEGORI sp ";
sql += "ON sp.SUPERKATEGORIID = s.SUPERKATEGORI ";
sql += "WHERE sp.SKNAMN = ?";
PreparedStatement ps = connection.prepareStatement(sql);
ps.setString(1, enSuperkategori);
ps.executeUpdate();

推荐阅读