我正在尝试连接到一个数据库,执行一个select语句,然后在JSP页面中输出该语句的结果。我已经能够连接到DB,并(我认为)执行该命令,但要么我的ResultSet
中没有任何内容,要么我没有正确显示结果。
我已经看了一些如何做到这一点的例子,我的代码几乎完全相同。当我运行代码时,得到的网页只有输出数据应该在的地方有这些空行。但是,它有三行空行,这是查询应该返回的元组数。我的代码是:
String query = "SELECT L.O_ID, L.INV_ID, L.OL_QUANTITY, L.OL_PRICE "
+ "FROM ORDERS O, ORDER_LINE L, ORDERSOURCE S "
+ "WHERE S.OS_DESC = 'Web Site' "
+ "AND O.OS_ID = S.OS_ID "
+ "AND L.O_ID = O.O_ID";
System.out.println(query);
ResultSet results = statement.executeQuery(query);
%>
<table border="1" width="50%" cellspacing="1" cellpadding="0" bordercolor="black" border="1">
<tr>
<th><font size="2"/>Order ID</th>
<th><font size="2"/>Inventory ID</th>
<th><font size="2"/>Quantity</th>
<th><font size="2"/>Price</th>
</tr>
<%while(results.next()) { %>
<tr>
<td><% results.getString("O_ID"); %></td>
<td><% results.getString("INV_ID"); %></td>
<td><% results.getString("OL_QUANTITY"); %></td>
<td><% results.getString("OL_PRICE"); %></td>
</tr>
<% } %>
</table>
</body>
</html>
此外,当我尝试在末尾使用;
运行查询时,它不会运行。但当我把它取下来时,它就跑了。在使用JDBC时,是否有什么原因不需要使用;
终止查询?
您只使用一条语句,而不使用脚本执行。;
用作SQL语句之间的分隔符。所以,在你的情况下,它是无用的。如果您使用的是像SQL Developer这样的客户端,如果您按下按钮运行脚本而不是运行当前语句,则可能会获得与分隔符相同的效果。你应该知道这一点。并且高亮显示的代码只执行那些高亮显示最后一个分隔符的语句。
您需要使用out.print函数来显示这些结果。
所以你要显示的代码应该是:
<td><% out.print(results.getString("O_ID")); %></td>
<td><% out.print(results.getString("INV_ID")); %></td>
<td><% out.print(results.getString("OL_QUANTITY")); %></td>
<td><% out.print(results.getString("OL_PRICE")); %></td>
我已经能够连接到数据库,并且(我认为)执行命令,但要么我的ResultSet中没有任何内容,要么我没有正确显示结果
首先,您没有在jsp中打印任何内容,请按照Larry的建议添加out.print()
。还要检查您是否正确地形成了查询,您可以在sql developer
这样的界面中进行检查。建议在执行sql
查询之前先打印它,以避免出现语法错误
此外,当我尝试使用";"运行查询时最后,它会未运行。但当我把它取下来时,它就跑了。你为什么不需要使用";"终止查询当使用JDBC时?
您不需要用分号终止sql
查询,在单个查询的情况下,jdbc
会这样做。看看SQL中是否需要分号?
最后,不要在jsp文件中编写java代码,尽量使用servlets
(即使在MVC中也是不可取的)。请参阅如何避免JSP文件中的Java代码?