Java+;SQL Server:结果集是否为空?
我不太熟悉将java用于数据库,我一直在尝试以下代码:Java+;SQL Server:结果集是否为空?,java,sql-server,jdbc,resultset,Java,Sql Server,Jdbc,Resultset,我不太熟悉将java用于数据库,我一直在尝试以下代码: public int getDateDiff(int OrderID) { Connection conn = DBConnection.getConnection(); Integer diff = null; String getdiffSQL = "SELECT DATEDIFF( DAY , StartDate , EndDate ) FROM CarOrder WHERE OrderID = ?;";
public int getDateDiff(int OrderID) {
Connection conn = DBConnection.getConnection();
Integer diff = null;
String getdiffSQL = "SELECT DATEDIFF( DAY , StartDate , EndDate ) FROM CarOrder WHERE OrderID = ?;";
try {
PreparedStatement pstm = conn.prepareStatement(getdiffSQL);
pstm.setInt(1, OrderID);
ResultSet rs = pstm.executeQuery(getdiffSQL);
while (rs.next()) {
diff = rs.getInt(1);
}
}
catch (SQLException ex) {
System.out.println("Error: " + ex.getMessage());
}
return diff;
}
我试着运行这个,但我遇到了这个问题
线程“AWT-EventQueue-0”java.lang.NullPointerException中出现异常
返回的差异为空。请告诉我这有什么问题,如何解决。不接受参数,您不应该传递查询字符串。而是使用以下模式:
PreparedStatement pstm = conn.prepareStatement(getdiffSQL);
pstm.setInt(1, OrderID);
ResultSet rs = pstm.executeQuery(); // no parameter
这是使用JDBC时经常犯的错误,部分原因是它将查询字符串作为参数。向本教程中添加与OP相同的错误,很容易看出为什么此错误如此普遍。不接受参数,您不应该传递查询字符串。而是使用以下模式:
PreparedStatement pstm = conn.prepareStatement(getdiffSQL);
pstm.setInt(1, OrderID);
ResultSet rs = pstm.executeQuery(); // no parameter
这是使用JDBC时经常犯的错误,部分原因是它将查询字符串作为参数。向本教程中添加与OP相同的错误,很容易看出为什么此错误如此普遍。当使用
PreparedStatement
调用executeQuery()
,而不是executeQuery(字符串查询)
。当使用PreparedStatement
调用executeQuery()
时,不是executeQuery>(字符串查询)
。如果对PreparedStatement
或CallableStatement
调用executeQuery(String)
(及其同级)时,JDBC 4.0(或更高版本)的正确实现应始终引发异常。如果executeQuery(String),JDBC 4.0(或更高版本)的正确实现应始终引发异常
(及其同级)在PreparedStatement
或CallableStatement
上被调用。