【发布时间】:2014-08-28 00:45:50
【问题描述】:
我已成功连接到我的数据库,但是当尝试使用 Java servlet 转发请求将 SQL 查询结果返回到我的 index.jsp 页面时,接收到“oracle.jdbc.driver.OracleResultSetImpl@48f675”的输出而不是预期的数据结果。 (注意:我在 Eclipse 的控制台视图中收到了来自我的 SQL 查询的预期结果;但是,我的 jsp 页面上并没有像我预期的那样显示数据。而是显示 ResultSetImp 消息。任何任何人都可以分享关于为什么我得到这个 ResultSetImp 而不是我的预期数据的见解将不胜感激。还有人愿意解释 ResultSetImp 的意思吗……我的搜索没有发现任何有用的东西,或者至少我理解. 代码如下:
package com.database;
import java.sql.*;
public class DBConnection {
public static void main(String[] args)
throws ClassNotFoundException, SQLException{
}
public static ResultSet queryExecute() throws ClassNotFoundException, SQLException
{
Class.forName("oracle.jdbc.OracleDriver");
Connection conn = DriverManager.getConnection("**Connection string here**");
if (conn == null)
{
System.out.println("Database connection not successfull");
}
else
{
System.out.println("Database connection success!");
//System.out.println(conn);
}
Statement stmt = conn.createStatement();
//ResultSet rs = stmt.executeQuery("SELECT COUNT(*) FROM Request natural join RequestTerm");
ResultSet rs = stmt.executeQuery("select * from (select QIPNUMBER,model,SERIALNUMBER,YEAROFMFG,DATERECEIVED,TERM,DEALERNAME from Request natural join RequestTerm)WHERE ROWNUM <= 20");
ResultSetMetaData rsmd = rs.getMetaData();
int columnsNumber = rsmd.getColumnCount();
//List<String> displayRecords = new ArrayList<String>(); try store result set into an array object
while (rs.next()) {
// Iterate through the data in the result set and display it.
//int count = rs.getInt(1);
while (rs.next()) {
//Print one row
for(int i = 1 ; i <= columnsNumber; i++){
System.out.print(rs.getString(i) + " " + " "); //Print one element of a row -- print vs println
}
System.out.println(); //Move to the next line to print the next row.
//System.out.println("Number of row:"+count);
}
}
rs.close();
stmt.close();
conn.close();
return rs;
}
}
我的 servlet 代码:
package com.srccodes.example;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
导入 com.database.DBConnection;
/**
* Servlet implementation class HelloWorld
*/
@WebServlet("/HelloWorld")
public class HelloWorld extends HttpServlet {
public static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public HelloWorld() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter printWriter = response.getWriter();
printWriter.println("<h1>Hello from the doGet function!</h1>");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
//ResultSet display = DBConnection.queryExecute();
request.setAttribute("display", DBConnection.queryExecute());
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
request.getRequestDispatcher("/index.jsp").forward(request, response);
/*String nextJSP = "/result.jsp";
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(nextJSP);
dispatcher.forward(request,response);*/
}
}
最后是我用来在 index.jsp 中调用我的 servlet 的语句:
我知道这个声明是一个脚本并且是不赞成的;但是,我正在尝试先将数据填充到我的 jsp 中,然后再从那里移动。
【问题讨论】:
-
因为您正在打印对对象 (ResultSet) 的引用。返回结果集对象不会神奇地打印结果。您必须调用对象上的方法来迭代并获取值。
-
感谢您的快速回复和帮助。所以我可以在我的类 DBConnection() 中创建一个方法来完成这个。数据是怎么打印到控制台的?
-
@user3812592 我在下面的回答中添加了您要询问的方法
标签: java sql jsp servlets jdbc-odbc