java - 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());
}
}
解决方案
我不知道错误的确切原因,但我的猜测是,一旦您运行内部插入,您的第一个结果集就会关闭。好消息是您可以使用以下单个查询运行整个插入:
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();
推荐阅读
- azure - 将用户分配给 Azure Active Directory 中的角色/组并复制到本地计算机
- r - rfsrc 对象不包含 VIMP 信息
- node.js - jest-haste-map:@providesModule 命名冲突:
- php - Laravel 关系 - hasMany, hasOne
- compiler-errors - gfortran:-fimplicit-none 不绕过错误
- python - 将多列连接成新列。csv 文件,python,熊猫
- python - 使用 SQLAlchemy 批量插入 Azure SQL 不持久
- android - Android 8.1 连接到调用 connectGatt 的 BLE 外围设备。回调总是说断开连接。从不连接
- javascript - 使用 Cheerio Nodejs 进行网页抓取
- php - 如何在php中显示当前日期和200天+当前日期