ResultSet关闭,仅打印第一个“ SUBKATEGORI”

时间:2019-02-11 10:14:33

标签: java netbeans

我正在运行代码并保持结果集已关闭,循环是否存在问题?从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());
    }
}

1 个答案:

答案 0 :(得分:0)

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

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