2016-05-28 3 views
1

У меня есть следующие хранимые процедуры:ResultSet пуст, событие, хотя запрос SQL нормально

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);      

      } 
+0

Каков тип столбца Full_Time_Stamp? Почему вы используете StartDate & EndDate как varchar, а не Date/Timestamp? – Mubin

+0

Full_Time_Stamp - это дата и время. И я использую их как varchar, потому что из java я не мог отправить их как значения datetime. –

+1

Дата-дата SQL Server сопоставляется с java.sql.Timestamp. Посмотрите здесь возможные сопоставления: https://msdn.microsoft.com/en-us/library/ms378878.aspx – Mubin

ответ

0

Вы попробовали отправить параметр как строку? Или измените тип параметра на datetime

Также на втором месте были дополнительные места.

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

Да. Если я использую его как строки, это дает мне следующую ошибку: преобразование типа данных varchar в тип данных datetime привело к значению вне диапазона. Поскольку Full_Time_Stamp имеет тип даты и времени. –

+0

Возможно, попробуйте этот метод http://stackoverflow.com/questions/6113674/how-do-i-execute-a-ms-sql-server-stored-procedure-in-java-jsp-returning-table-d Здесь используется prepareStatement вместо подготовки вызова –

+0

Спасибо за помощь. Я решил это, после того как я изменил параметры на отметки времени. –