【问题标题】:JDBC ResultSet no results?JDBC ResultSet 没有结果?
【发布时间】:2010-12-24 04:05:44
【问题描述】:

为什么这个查询没有任何结果?只有“电影!”当我运行这个 servlet 时打印出来。

import java.io.*;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.sql.*;

public class Service extends HttpServlet {
 private static final long serialVersionUID = 1L;

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  response.setContentType("text/html");
  PrintWriter out = response.getWriter();
  out.println("Movies!");

  Connection connection = null;
  Statement statement = null;
  try {
   connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test");   
   statement = connection.createStatement();
   String query = "SELECT * FROM movies";
   ResultSet rs = statement.executeQuery(query);
   while(rs.next()) {
    out.println("result set");
    out.print(rs.getInt(1));
    out.print(rs.getString(2));
    out.print(rs.getInt(3));
    out.print(rs.getInt(4));
   }
  } catch(SQLException e) {
   e.printStackTrace();
  }
 }
}

【问题讨论】:

  • 与你的问题无关,但总是最后关闭Connection、Statement、ResultSet(或使用DbUtils)。
  • Thilo 的评论 +10。

标签: java servlets jdbc


【解决方案1】:

最佳猜测:表中没有行。手动执行查询的结果是什么?

mysql test #连接mysql

从电影中选择 *;

【讨论】:

  • 我已经手动用查询测试过,应该有一个结果行。
【解决方案2】:

您正在通过e.printStackTrace() 将异常写入服务器日志文件,而不是抛出异常,这样它最终会出现在 webbrowser 中的一个不错的错误页面中。

如下修复:

throw new ServletException("Querying from DB failed!", e);

否则你必须在服务器日志中挖掘问题的确切原因。


与实际问题无关,请记住在finally 块中正确关闭您的资源。你在泄露它们。另请参阅basic JDBC tutorial


更新:终于找到问题的原因了:

java.sql.SQLException: No suitable driver found

您需要download JDBC 驱动程序,将JAR 文件放在/WEB-INF/lib 文件夹中,并将其加载到您的代码中,如下所示在您获得任何连接之前:

Class.forName("com.mysql.jdbc.Driver");

另见:

【讨论】:

  • "java.sql.SQLException: 没有为 jdbc:mysql://localhost:3306/test 找到合适的驱动程序" 嗯
【解决方案3】:

下载 MySQL JDBC 驱动程序

http://dev.mysql.com/downloads/connector/j/

将jar复制到WEB-INF/lib文件夹中

【讨论】:

    【解决方案4】:

    嗨 在编译之前,您必须将 clsses12.jar 或其他 Ojdc14 jar 文件放在类路径中,然后进行编译。 这里有一些示例代码 ResultSet res=statement.executeQuery("SELECT FIRST-NAME FROM FOO"); StringBuffer sb=new StringBuffer(); 而(rs.next()) { sb.append("\n"+rs.getString(1)); }

    【讨论】:

    • 1.) 您提到的 jar 文件在编译期间不需要位于类路径中,而仅在执行代码时才需要。 2.)您提到的jar文件是Oracle驱动程序jar,而问题似乎使用了MySQL数据库。
    【解决方案5】:

    您好,从 http://www.mysql.com/products/connector/ 下载 MYSQL JDBC 驱动程序,类似 JDBC Driver for MYSQL。将 jdbc jar 文件放在应用程序中的 /WEB-INF/lib 位置。

    在您的代码中缺少以下语句

    Class.forName("com.mysql.jdbc.Driver");

    把它放在你下面的代码行之前

    connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test");

    并重新启动服务器..确保您的数据库服务正在运行...

    然后检查..

    希望您不会再遇到错误...

    ~普里扬詹

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-24
      • 2017-06-20
      • 1970-01-01
      • 2023-03-23
      相关资源
      最近更新 更多