【问题标题】:Java ResultSet empty but actually it shouldn't beJava ResultSet 为空,但实际上它不应该是
【发布时间】:2015-09-17 09:13:08
【问题描述】:

我正在尝试打印 ResultSet,但它不打印任何内容。有人可以告诉我有什么问题吗? 我正在使用 Oracle 11g、JDK 1.7 和 ojdbc6.jar。 提前致谢。 我执行的代码如下。

import java.sql.*;
public class database  {   
public static void main( String args[]){
    System.out.println("---Connecting to Oracle---");
    try{
        Class.forName("oracle.jdbc.driver.OracleDriver");
    }
    catch( ClassNotFoundException e){
        System.out.println( e );
    }
    System.out.println("---JDBC Registered---");
    String URL = "jdbc:oracle:thin:admin/nihtij34@localhost:1521:XE";
    String user = "admin";
    String pwd = "nihtij34";
    try{
         Connection con = DriverManager.getConnection(URL,user,pwd);
         Statement s = con.createStatement();
         s.executeQuery ("select * from seat  where doj= '1-01-2016' ");
         System.out.println("---QUERY EXECUTED---");
         ResultSet rs1 = s.getResultSet();
         while(rs1.next()){
             System.out.println( rs1.getString("tno"));
             System.out.println( rs1.getString("doj"));
             System.out.println( rs1.getString("sl"));
             System.out.println( rs1.getString("ac3"));
             System.out.println( rs1.getString("ac2"));
         }
         s.close();
         con.close();
    }
    catch(SQLException e){
        System.out.println(" NOT CONNECTED\n"+e);
    }           
} 
}

我得到的输出如下:

---Connecting to Oracle---
---JDBC Registered---
---QUERY EXECUTED---

我在Oracle中尝试了查询,它返回了以下结果。

SQL> select * from seat where doj='1-01-2016';

   TNO DOJ                SL        AC3        AC2
---------- ---------- ---------- ---------- ----------
 11042 1-01-2016          10         10         10
 12163 1-01-2016          10         10         10
 12321 1-01-2016          10         10         10
 12322 1-01-2016          10         10         10
 12323 1-01-2016          10         10         10
 12324 1-01-2016          10         10         10
 12615 1-01-2016          10         10         10
 12616 1-01-2016          10         10         10
 12841 1-01-2016          10         10         10
 12842 1-01-2016          10         10         10
 12951 1-01-2016          10         10         10

   TNO DOJ                SL        AC3        AC2
---------- ---------- ---------- ---------- ----------
 12952 1-01-2016          10         10         10

12 rows selected.

谁能告诉我是什么问题? 提前致谢。

【问题讨论】:

  • 如果你尝试 select * from seat where doj= '1-01-2016' ?
  • 你确定两者都使用相同的数据库?
  • @UweAllner 是的,我对两者都使用相同的数据库。反复检查了好几遍。
  • @jarlh sql 查询返回相同的输出。更新了输出。
  • 您是否尝试过使用 to_date 格式化您的日期输入。它如何知道您选择了哪种格式的日期作为输入?

标签: java sql oracle jdbc resultset


【解决方案1】:

s.executeQuery 行已经返回一个 ResultSet,您应该使用它,而不是随后调用 s.getResultSet()。这里的JavaDoc 也表示第二次调用将返回null。我很惊讶您在 rs1.next() 上没有收到 NullPointerException。

另外,顺便说一句,将 Connection 和 Statement 变量移到 try-catch 块之外并在 finally 块中关闭它们,或使用 Java 7 try-with-resources 通常是一个好习惯建设。

【讨论】:

  • 试过这个。没用。得到相同的输出。 ResultSet rs1 = s.executeQuery ("select * from seat where doj= '1-01-2016' ");
  • 我同意,他们丢失了原始 rs,我的额外说明:由于语言环境,使用字符串参数查询 DATE 列的便携性很差
【解决方案2】:

能否先从resultSet中提取数据到变量中,然后再输出变量?

例如:

String variable1 = rs1.getString("tno1")
......................................
String variable5 = rs1.getString("ac2")
System.out.println(variable1);
......................................
System.out.println(variable5);

【讨论】:

  • 这有什么帮助,你能解释一下吗?
  • 这将逐项提取(逐行)将它们放入变量中,然后显示它们。如果我正确理解您的问题,我认为这将起作用。但是,这只适用于少数项目。否则,您可以选择 * 显示所有项目。
  • 通过 rs.getString("colName") 本身创建一个隐式引用。所以将它分配给一个新的字符串变量应该没有任何区别。因为他正在有效地做同样的事情。但是您不必要地创建了如此多的字符串引用。除了你的代码不会提供任何帮助,它甚至会降低性能
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-26
  • 2020-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-09
相关资源
最近更新 更多