即使我的结果集不是空的,我也不会得到输出。使用JAVA和oracledb
数据库的日期格式相同。查询在Oracle数据库中运行良好。在java中,结果集不是空的。我想不出这个问题的可能原因。请帮忙即使我的结果集不是空的,我也不会得到输出。使用JAVA和oracledb,java,jdbc,oracle11g,runtime-error,resultset,Java,Jdbc,Oracle11g,Runtime Error,Resultset,数据库的日期格式相同。查询在Oracle数据库中运行良好。在java中,结果集不是空的。我想不出这个问题的可能原因。请帮忙 try { Class.forName(driverClass); Connection cn=null; cn=DriverManager.getConnection(url,username,password); Scanner sc=new Scanner(System.i
try {
Class.forName(driverClass);
Connection cn=null;
cn=DriverManager.getConnection(url,username,password);
Scanner sc=new Scanner(System.in);
System.out.print("Enter Ship date in yyyy-mon-dd format: ");
String str=sc.next();
System.out.println(str);
//select PO_NUMBER from PURCHASE_ORDER where SHIPDATE=TO_DATE('2021-JAN-25','YYYY-MON-
DD');
String sql = "select PO_NUMBER from PURCHASE_ORDER where
SHIPDATE=TO_DATE('"+str+"','YYYY-MON-DD')";
System.out.println("Query exec");
Statement stmt = cn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
if(rs.next())
System.out.println("Purchase Order Shipped on "+ str+" are: ");
else
System.out.println("empty rs");
while(rs.next()) {
System.out.println(rs.getInt(1));
}
cn.close();
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
OUTPUT : Enter Ship date in yyyy-mon-dd format: 2021-JAN-25
2021-JAN-25
Query exec
Purchase Order Shipped on 2021-JAN-25 are:
当前的
while
循环丢弃第一行(可能是唯一一行)。我能看到的最简单的解决方案是在if
中将其更改为do while
。大概
if(rs.next()) {
System.out.println("Purchase Order Shipped on " + str + " are: ");
do {
System.out.println(rs.getInt(1));
} while(rs.next());
} else {
System.out.println("empty rs");
}
这是正确的。这个答案为您提供了一些推荐做法
语句
,以防止出现错误e.printStackTrace()
是不好的做法,因为堆栈跟踪对最终用户没有用处一般规则是:如果您的方法无法处理异常(即无法从异常状态恢复),则不应捕获异常,并应使用方法签名声明抛出。这将确保调用方法有机会以所需的方式处理异常
ResultSet
光标最初位于第一行之前;对方法next的第一次调用使第一行成为当前行第二次调用使第二行成为当前行,依此类推。
- 这意味着,在调用
之后,在再次调用ResultSet#next
之前,您必须从ResultSet#next
ResultSet#中获取值,而在第一次调用
时,ResultSet#next
从数据库中获取的值则丢失了该值,正在浪费ResultSet
- 要么按照Elliott Frisch建议的方式处理,要么按照下面代码中显示的另一种方式处理
Scanner sc = new Scanner(System.in);
System.out.print("Enter Ship date in yyyy-mon-dd format: ");
String str = sc.next();
String query = "select PO_NUMBER from PURCHASE_ORDER where SHIPDATE = TO_DATE(?, 'YYYY-MON-DD')";
try (Connection cn = DriverManager.getConnection(url,username,password);
PreparedStatement stmt = cn.prepareStatement(query)) {
stmt.setString(1, str);
ResultSet rs = stmt.executeQuery(query);
if(rs.next()) {
System.out.println("Purchase Order Shipped on "+ str+" are: ");
System.out.println(rs.getInt(1));
while(rs.next()) {
System.out.println(rs.getInt(1));
}
} else {
System.out.println("empty rs");
}
}