Tag: 结果集

Java ResultSet,SetObject与SetString / SetDate / etc

我想知道是否有人认为在准备语句时将PreparedStatement.setObject用于所有数据类型是不好的做法。 一个用例就是一个带有通用executeQuery()方法的DAO,它可以重用于所有查询,而不必担心它的数据类型。

迭代ResultSet并在ArrayList中添加其值

我正在遍历ResultSet并尝试将其值复制到ArrayList 。 问题是它的遍历只有一次。 但是使用resultset.getString(“Col 1″)到resultset.getString(‘Col n”)显示所有列的所有条目。下面是代码片段 – ResultSet resultset = null; ArrayList arrayList = new ArrayList(); int i = 1; while (resultset.next()) { arrayList.add(resultset.getString(i++)); System.out.println(resultset.getString(“Col 1”)); System.out.println(resultset.getString(“Col 2”)); System.out.println(resultset.getString(“Col n”)); } 将ResultSet复制到ArrayList的唯一值是第1列。然后退出时。 但我可以看到所有列的价值。 为什么?

关闭结果集后,Oracle不会删除游标

注意:我们重用单一连接。 ************************************************ public Connection connection() { try { if ((connection == null) || (connection.isClosed())) { if (connection!=null) log.severe(“Connection was closed !”); connection = DriverManager.getConnection(jdbcURL, username, password); } } catch (SQLException e) { log.severe(“can’t connect: ” + e.getMessage()); } return connection; } ************************************************** public IngisObject[] select(String query, String idColumnName, String[] columns) { Connection con = connection(); […]

如何将JDBC ResultSet检索为ArrayList?

我正在进行查询以检索大量ID(整数)。 而不是通过ResultSet迭代数百万次并将所有内容一个接一个地复制到ArrayList,有没有办法简单地将所有内容检索为ArrayList? 我知道ResultSet应该被迭代,因为底层实现可能是缓存内容,但在我的情况下,我只需要立即获取所有ID。 我知道我可以将FetchSize设置为一个很大的数字,但是我仍然需要逐个检索ID。 澄清:我想这样做的原因是表现。 分析告诉我,数百万次执行ResultSet.next(),ResultSet.getInt()和ArrayList.add()需要相当长的时间。 我认为数据库(我使用H2,用Java编写)可能在内存中的某个地方有数组或列表,所以我正在寻找一种方法让它直接复制到我而不是通过ResultSet迭代接口。

JDBC-ResultSet在while-Loop中关闭

我在使用ResultSet时遇到了非常糟糕的时间,ResultSet在while-Loop中关闭,用于迭代此ResultSet。 我已经知道ResultSet关闭的确切行,但我不知道为什么。 public LinkedList alleAbrufen () throws SQLException { LinkedList alleAthleten = new LinkedList(); String abrufenAthleten = “SELECT * FROM Athlet ORDER BY athlet_id”; ResultSet athleten_rs = stmt.executeQuery(abrufenAthleten); while (athleten_rs.next()) { long id = athleten_rs.getInt(1); String name = athleten_rs.getString(2); LinkedList alleLeistungen = alleAbrufen((int) (id)); //after this line the ResultSet gets closed alleAthleten.add(new Athlet(id, name, alleLeistungen)); […]

Java:删除选定的行ResultSet,从数据库中删除最后一行?

当我选择一行并按“删除”按钮时: 在swing界面中,删除所选行(如预期的那样)。 但 在实际数据库中,无论选择的行是什么(不是预期的),都会删除最后一行。 删除的行始终是数据库中的最后一行,无论实际选择的行是什么。 我的代码中没有错误也没有抛出exception。 它没有任何中断。 我实际上在我的代码中添加了必要的东西: Statement sqlStatement = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); 并添加“删除”按钮以删除所选行: JButton removeEmployee = new JButton(“Remove Selected”); removeEmployee.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { dTableModel.removeRow(table.getSelectedRow()); try { resultSet.absolute(table.getSelectedRow()); resultSet.deleteRow(); } catch (SQLException e1) { e1.printStackTrace(); } } });

如果没有明确关闭,ResultSet会泄漏吗?

我正在使用带有jetty的jdbc连接池,在服务器实例上进行了这种设置,一年多没有问题。 我已经切换到新的ubuntu服务器,并且内存不足。 我正在分析内存使用情况并查看以下顶级实例: java.util.Hashtable$Entry (33%) com.mysql.jdbc.ConnectionPropertiesImpl$BooleanConnectionProperty (13%) com.mysql.jdbc.ConnectionPropertiesImpl$StringConnectionProperty (3%) com.mysql.jdbc.ConnectionPropertiesImpl$IntegerConnectionProperty (3%) 我没有显式关闭我的ResultSet实例,我正在做类似的事情: Connection conn = null; PreparedStatement stmt = null; try { conn = …; stmt = …; ResultSet rs = …; rs.useIt(); } finally { if (stmt != null) { stmt.close(); } if (conn != null) { conn.close(); } } 文档说,Statement将在关闭时关闭相关的ResultSet实例 – 这个ubuntu机器上的jdbc实现是否可能实际上没有这样做? 我没有对我的代码(一个打包的.war文件)进行任何更改,我只是把它放到这个ubuntu机器上的一个jetty实例中。 […]

为什么我应该在ResultSet和Connection实例上调用close()?

当我不需要在我的程序中使用那些ResultSet和Connection的实例时,为什么我应该在它们上面调用.close()方法呢? 没有这样做的危险(如果有的话)是什么?

如何从实体管理器获取ResultSetMetaData?

有没有办法通过在JPA中的实体管理器上执行nativeQuery来获取返回结果的MetaData ?

JDBC返回空结果集

我正在使用JDBC进行非常简单的数据库连接。 我创建了我的连接/语句并执行了查询。 我在调试器中检查语句的查询对象以确认它正在发送正确的查询。 然后我仔细检查数据库上的查询(直接从调试器复制)以确保它返回数据。 但是,返回的结果集在.next()上给出了false 这里有什么常见的陷阱,我错过了吗? public List getGroups() { myDB.sendQuery(“select distinct group_name From group_members where username='” + this.username + “‘”); ResultSet results = myDB.getResults(); List returnList = new ArrayList(); try { while (results.next()) { returnList.add(new InterestGroup(results.getString(“group_name”), myDB)); } return returnList; } catch (SQLException e) { e.printStackTrace(); return null; } } 和myDB类(简单的包装器,让我将连接/语句代码放入任何项目) public void sendQuery(String […]