【问题标题】:ResultSet is empty, event though the sql query is okResultSet 为空,尽管 sql 查询正常但事件
【发布时间】:2016-05-28 10:55:46
【问题描述】:

我有以下存储过程:

ALTER PROCEDURE Uspinformation3 (@TypeNr    VARCHAR(50), 
                                 @Process   VARCHAR(50), 
                                 @StartDate VARCHAR(50), 
                                 @EndDate   VARCHAR(50)) 
AS 
  BEGIN try 
      SET dateformat dmy; 

      SELECT Count(rownr) 
      FROM   diff_ct 
      WHERE  type_number = @TypeNr 
             AND process = @Process 
             AND full_time_stamp BETWEEN @StartDate AND @EndDate 
  END try 

如果我从 SQL Server 执行过程,它会给我想要的答案

EXEC uspInformation3 1137328582, 427, 
                     {ts '2015-05-24 12:00:00'}, {ts  ' 2015-05-24 16:00:00 '}

但是,当我尝试从 Java 中执行此操作时,结果集始终为空。我在哪里做错了?我想这与我使用的数据类型有关?

 try {
                Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
                Connection conn = DriverManager.getConnection(DB_Connection);

              String partno = pn.getText();
              String processname = procname.getText();
            // String StartTime =  DataStart.getText();  
      String StartTime = "{ts " +"'"+ DataStart.getText() +"'}";


            String EndTime = "{ts " +"'"+ DataFinal.getText()+"'}";


      System.out.println(StartTime);


            Statement state = conn.createStatement();
     CallableStatement cs = null;


     cs = conn.prepareCall("{call uspInformation3(?,?,?,?)}");
        cs.setString(1, partno);
        cs.setString(2, processname);
        cs.setString(3, StartTime);
        cs.setString(4, EndTime);
        cs.executeQuery();

       ResultSet rs = cs.getResultSet();

       System.out.println(rs);
        if(rs.next()) {

               String totalct = rs.getString(1);
               System.out.println(totalct);
           totalctno.setText(totalct);                      

          }

【问题讨论】:

  • Full_Time_Stamp 列的类型是什么?为什么使用 StartDate & EndDate 作为 varchar 而不是 Date/Timestamp?
  • Full_Time_Stamp 是一个日期时间。我将它们用作 varchar,因为从 java 中,我无法将它们作为日期时间值发送。
  • SQL Server 的日期时间映射到 java.sql.Timestamp。在此处查找可能的映射:msdn.microsoft.com/en-us/library/ms378878.aspx
  • 感谢您的帮助 :) 在我将其设置为时间戳后,我能够解决它
  • 你也应该学会正确地缩进你的代码。让阅读你的代码更容易。

标签: java sql-server resultset


【解决方案1】:

您是否尝试将参数作为字符串发送?或者把参数类型改成datetime

第二次约会时也有多余的空间。

EXEC uspInformation3 1137328582, 427, 
                     '2015-05-24 12:00:00', '2015-05-24 16:00:00';

【讨论】:

  • 是的。如果我将其用作字符串,则会出现以下错误:将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。因为 Full_Time_Stamp 有一个 datetime 类型。
  • 也许可以试试这个方法stackoverflow.com/questions/6113674/…这里使用prepareStatement而不是prepare call
  • 感谢您的帮助。我把参数改成时间戳后解决了。
猜你喜欢
  • 2014-04-19
  • 2021-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-30
  • 2020-05-27
相关资源
最近更新 更多