【发布时间】:2014-07-30 08:29:26
【问题描述】:
我有 sql 查询,我在 MysqlWorkBench 中运行,结果如下:
order_id, customer_id, date, product_id, quantity
'1', '1', '2014-07-30 01:20:46', '1', '7'
'1', '1', '2014-07-30 01:20:46', '2', '3'
'1', '1', '2014-07-30 01:20:46', '3', '2'
'1', '1', '2014-07-30 01:20:46', '7', '1'
现在我正在尝试在我的应用中获得相同的结果,这是代码
public synchronized List<Order> getAllOrders() throws DatabaseException{
List<Order> orders = new ArrayList<>();
Connection connection = null;
PreparedStatement statement = null;
ProductDao productDao = new ProductDao();
try{
try {
connection = ConnectionPool.getInstance().getConnection();
statement = connection.prepareStatement("SELECT order_id,customer_id,`date`,product_id,quantity FROM 4elements.purchase as r INNER JOIN product_in_order d ON r.id = d.order_id");
ResultSet result = statement.executeQuery();
while (result.next())
{
Order order = new Order();
int i = 1;
order.setId(result.getInt(i++));
order.setCustomerId(result.getInt(i++));
order.setDate(result.getTimestamp(i++));
int productId = result.getInt(i++);
Item item = new Item(productDao.getProduct(productId));
item.setQuantity(result.getInt(i++));
orders.add(order);
}
}
finally{
closePreparedStatement(statement);
returnConnection(connection);
}
return orders;
}
如果很重要,我会使用我自己的ConnectionPool(这是任务的一部分)。
当我尝试获取第一个 int 时,我得到 "After end of result set" 异常。
我尝试使用 Statement 而不是 PreparedStatement - 同样的例外。
我还尝试通过列名获取结果,在这种情况下,我只能从结果中获取第一个 int - 但仍然出现异常。
请有人告诉我有什么问题吗?
这里是堆栈跟踪:
30-Jul-2014 11:47:05.110 INFO [http-apr-8080-exec-377] org.apache.catalina.util.LifecycleBase.start The start() method was called on component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/WebApp4Epam]] after start() had already been called. The second call will be ignored.
java.sql.SQLException: After end of result set
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1094)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:997)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:983)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:928)
at com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:850)
at com.mysql.jdbc.ResultSetImpl.getInt(ResultSetImpl.java:2705)
at dao.OrderDao.getAllOrders(OrderDao.java:64)
at command.GetOrdersCommand.execute(GetOrdersCommand.java:28)
at command.AdminLoginCommand.execute(AdminLoginCommand.java:31)
at controller.ControllerServlet.processRequest(ControllerServlet.java:51)
at controller.ControllerServlet.doPost(ControllerServlet.java:42)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:644)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at filters.EncodingFilter.doFilter(EncodingFilter.java:35)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:136)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:526)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1078)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:655)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:277)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2381)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2370)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:744)
--添加--
我在不同的桌子上尝试了以下其他 从客户中选择 *
statement = connection.prepareStatement("SELECT * FROM CUSTOMER");
result = statement.executeQuery();
if (result.next()){
customer = new Customer();
customer.setId(result.getInt("id")); //I get an exception in that line
customer.setFirstName(result.getString("first_name"));
customer.setSecondName(result.getString("second_name"));
}
然后得到结果,但它仍然给我一个例外。
有什么想法吗?
【问题讨论】:
-
请向我们展示用于检索示例中这 4 行的初始查询!
-
如果数据显示为
'1'那么这是否意味着它是一个字符串而不是一个整数 -
异常到底是在哪里抛出的?发布堆栈跟踪!
-
@Albus:发布抛出的异常并在下方发表评论
-
@NishanthiGrashia 已添加。