Tag: resultset

ResultSet关闭后不允许操作

好吧,在过去的两天里,我一直试图解决这个问题。 Statement statement = con.createStatement(); String query = “SELECT * FROM sell”; ResultSet rs = query(query); while (rs.next()){//<— I get there operation error here 这是查询方法。 public static ResultSet query(String s) throws SQLException { try { if (s.toLowerCase().startsWith(“select”)) { if(stm == null) { createConnection(); } ResultSet rs = stm.executeQuery(s); return rs; } else { if(stm == […]

ResultSet的Oracle JDBC性能

到目前为止,我一直在使用这样的查询我的数据库工作得非常好: PreparedStatement prepStmt = dbCon.prepareStatement(mySql); ResultSet rs = prepStmt.executeQuery(); 但后来我需要使用rs.first(); 为了能够多次迭代我的rs 。 所以我现在用 PreparedStatement prepStmt = dbCon.prepareStatement(mySql,ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); 我的问题与两者的表现有关。 如果我使用第二个选项,我会失去什么? 使用第二个选项会对我到目前为止编写的代码产生任何负面影响吗? PS:请注意,我的应用程序是一个使用后端Oracle 11g数据库的多用户,数据库密集型Web应用程序(在Weblogic 10.3.4上)。 谢谢大家的关注。 UPDATE 我的最大重新设置大小将小于1000行和15-20列

ResultSet:exception:set type是TYPE_FORWARD_ONLY – 为什么?

我的代码非常简单: pstat=con.prepareStatement(“select typeid from users where username=? and password=?”); pstat.setString(1, username); pstat.setString(2, password); rs=pstat.executeQuery(); int rowCount=0; while(rs.next()) { rowCount++; } rs.beforeFirst(); if(rowCount>=1) { while(rs.next()) { typeID=rs.getInt(1); } 但是当执行这段代码时我得到了…… java.sql.SQLException: Result set type is TYPE_FORWARD_ONLY at sun.jdbc.odbc.JdbcOdbcResultSet.beforeFirst(Unknown Source) at server.ClientImpl.login(ClientImpl.java:57) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at sun.rmi.server.UnicastServerRef.dispatch(Unknown Source) at […]

将结果集值放入Collection对象,然后添加到ArrayList

我正在处理我的resultset以获取详细信息。 我需要返回一个ArrayList ,那么如何将resultset集中的键值放到任何集合对象中,然后将它们放到ArrayList ? 这是代码: public List addBikes() throws ClassNotFoundException, SQLException{ List bikeList = new ArrayList(); Class.forName(“com.mysql.jdbc.Driver”); Connection con = null; Statement stm = null; ResultSet rs = null; con=DriverManager.getConnection(“jdbc:mysql://localhost:3306/spring_hibernate”,”root”,”root”); ; stm=con.createStatement(); String qry=”Select * from bike”; rs=stm.executeQuery(qry); while(rs.next()) { /* I need to put * rs.getString(“name”),rs.getString(“model”) * etc into any of the suitable collection […]

在RowMapper中使用查询

在java中我会做类似下面的事情来迭代resultset并形成查询, public Map<String, List> fun(){ Map<String, List> map = new TreeMap<String, List>(); LinkedHashSet set = new LinkedHashSet(); String sql = “select distinct(column) from table where conditions orderby column “; ResultSet rslt = stmt.executeQuery(sql); while (rslt.next()) { al.add(rslt.getString(1)); } for (String s : al) { List list = new ArrayList(); String sql2 = “select * from […]

为什么While(rs.next())语句在第一次迭代后结束?

我使用SELECT语句从表中获取数据,然后将其插入另一个表。 但是行“stmt.executeQuery(query);” 从表中插入第一行然后退出。 当我注释掉这一行时,while循环遍历打印出来的所有行。 堆栈跟踪未显示任何错误。 为什么会这样? try{ String query = “SELECT * FROM “+schema_name+”.”+table; rs = stmt.executeQuery(query); while (rs.next()) { String bundle = rs.getString(“BUNDLE”); String project_cd = rs.getString(“PROJECT_CD”); String dropper = rs.getString(“DROPPER”); String week = rs.getString(“WEEK”); String drop_dt = rs.getString(“DROP_DT”).replace(” 00:00:00.0″,””); query = “INSERT INTO INDUCTION_INFO (BUNDLE, PROJECT_CD, DROPPER, WEEK, DROP_DT) ” + “VALUES (” […]

如何使用Java 5和6来存根/模拟JDBC ResultSet?

我正在测试一些使用JDBC语句等的类,现在我遇到了JDBC ResultSet接口的问题: 该软件应该与Java 5和Java 6一起运行,因此测试也应该与两个版本一起运行。 不幸的是,Java 6引入了一堆新方法(这仍然不是什么大问题),它返回了一堆新的类/接口,这使事情变得更加困难。 (参见Frank Carver的Punch Barrel -例如Java 6打破了JDBC ) 在找出这些版本差异之前,我考虑了在存根和模拟之间并最终使用了存根,因为ResultSet具有内部状态(当前行处理),这对我来说更自然地使用存根,如下所示: public class StubResultSet implements ResultSet { private Object[][] data; private int currentRow = -1; private boolean closed = false; public StubResultSet(Object[][] data) { this.data = data; } public Object getObject(int columnIndex) throws SQLException { checkClosed(); return data[currentRow][columnIndex]; } public String getString(int […]

使用数据填充ResultSet的简便方法

我想模拟一个ResultSet。 认真。 我正在重构一个从ResultSet中解析数据的大型复杂代码,我希望我的代码行为相同。 因此,我需要为重构的部分编写一个unit testing,以便能够对此进行测试。 谷歌搜索后,我想出了两个想法: 使用EasyMock,编写looooong模拟序列。 非常糟糕的解决方案:难以添加初始数据,难以更改数据,大测试调试的好处。 使用Apache Derby或HSQLDB创建内存数据库,从文件或String数组填充它,查询一些神奇的InMemoryDBUtils.query(sql)。 然后使用该ResultSet。 不幸的是,我没有找到任何神奇的InMemoryDBUtils来快速编写测试:-)。 IBM的文章“使用Derby进行持久性的隔离unit testing”似乎对我需要的东西很好,尽管…… 第二种方法看起来更容易,也更容易支持。 你有什么建议创建这样的模拟? (尽管医生,当然:-)? 我错了眉毛一些银弹吗? 可能,DBUnit是这个的工具吗?

JDBC ResultSet getDate丢失精度

我在ResultSet.getDate(x)调用中失去了精度。 基本上: rs = ps.executeQuery(); rs.getDate(“MODIFIED”); 返回截断日期,其中MODIFIED是默认精度的Oracle TIMESTAMP字段。 我想可能会有一些我不知道的JDBC调整; 通常TIMESTAMP与DATE兼容,但我希望我不必重新定义整个表。

RowSet,CachedRowSet等的实现

直到今天,我在处理查询结果时正在使用ResultSet 。 但今天我读了一些关于RowSet和CachedRowset ,我意识到它们可以更好地满足我的目的。 虽然在所有的例子中我都读到了RowSet和CachedRowSet被称为对象的地方,当我在我的代码中自己尝试它时,我意识到这些是接口,在示例中它们使用了这些接口的一些实现。 现在我的问题是我在哪里找到这些实现,是否有正式的东西? 我需要下载它们还是它们带有JDK?